{"version":3,"file":"[request].chunk.37ead37fabacb8cc7ee8.js","mappings":"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","sources":["webpack:///./html/wp-content/themes/ls/src/js/helpers/formHelpers.ts","webpack:///./html/wp-content/themes/ls/src/js/main/components/forms/ui/formUISlider.js","webpack:///./html/wp-content/themes/ls/src/js/main/components/progressIndicator.ts","webpack:///./html/wp-content/themes/ls/src/js/main/components/toggleSwitch/toggleSwitch.js","webpack:///./html/wp-content/themes/ls/src/js/main/components/tooltip/tooltip.js","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/legacyPricing.js","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/buildSwiper.js","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/pricingPaymentsToggle.ts","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/helpers/controlCellState.ts","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/index.js","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/pricingLocationSelector.ts","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/pricingLocationTypes.ts","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/pricingTableTabs.ts","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/wizardPricing/index.ts","webpack:///./html/wp-content/themes/ls/src/js/page/pricing/retailLocalizationPricing/wizardPricing/wizardPricingGTM.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/URLParams/URLParams.js","webpack:///./html/wp-content/themes/ls/src/js/utils/cookies/cookieMonster.js","webpack:///./html/wp-content/themes/ls/src/js/utils/cookies/geoMonster.js","webpack:///./html/wp-content/themes/ls/src/js/utils/dom/localStorage.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/forms/getAnonymizedFieldValue.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/forms/getFieldData.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/getElementStyleProperty.js","webpack:///./html/wp-content/themes/ls/src/js/utils/json/isJson.js","webpack:///./html/wp-content/themes/ls/src/js/utils/locale/getLocale.js","webpack:///./html/wp-content/themes/ls/src/js/utils/string/encoding.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/tracking/BTFNavTracking/getClickedElAncestorsText.js","webpack:///./html/wp-content/themes/ls/src/js/utils/tracking/BTFNavTracking/getFormattedTrackingString.js","webpack:///./html/wp-content/themes/ls/src/js/utils/tracking/GA4/formTracking.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/tracking/GA4/googleTagManager.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/tracking/GA4/types.ts","webpack:///./html/wp-content/themes/ls/src/js/utils/tracking/channelsCallbackGroup.js","webpack:///./html/wp-content/themes/ls/src/js/utils/tracking/googleTagManagerDeprecated.js"],"sourcesContent":["import {\n    saveEncodedValueToLocalStorage,\n    getDecodedValueFromLocalStorage,\n} from 'root/utils/dom/localStorage';\nimport { CookieMonster } from 'root/utils/cookies/cookieMonster';\nimport { GoogleTagManager } from 'root/utils/tracking/GA4/googleTagManager';\nimport { FormGTMObjectConstructor } from 'root/utils/tracking/GA4/formTracking';\n\ninterface Props {\n    form: HTMLFormElement;\n    errorClass?: string | undefined;\n    target: HTMLFormElement;\n}\n\nfunction handleDomainPrefixField({ form, errorClass }: Props) {\n    const domainPrefixField = form?.domain_prefix;\n    const domainPrefixFieldParent = domainPrefixField?.parentElement;\n\n    function hideDomainPrefix() {\n        if (domainPrefixFieldParent && domainPrefixField) {\n            domainPrefixFieldParent.style.display = 'none';\n            domainPrefixField.required = false;\n            domainPrefixFieldParent.dataset.fieldIsHidden = 'true';\n            errorClass &&\n                domainPrefixField.classList.contains(errorClass) &&\n                domainPrefixField.classList.remove(errorClass);\n        }\n    }\n\n    function showDomainPrefix() {\n        if (domainPrefixFieldParent) {\n            domainPrefixFieldParent.dataset.fieldIsHidden = 'false';\n            domainPrefixFieldParent.style.display = 'block';\n        }\n\n        domainPrefixField && (domainPrefixField.required = true);\n    }\n\n    function toggleDisplay() {\n        if (form.form_type?.value?.includes('free-trial')) {\n            showDomainPrefix();\n        } else {\n            hideDomainPrefix();\n        }\n    }\n    function removeOnSubmit() {\n        if (\n            domainPrefixFieldParent?.style.display === 'none' ||\n            domainPrefixFieldParent?.dataset.fieldIsHidden === 'true'\n        ) {\n            domainPrefixFieldParent?.remove();\n        }\n    }\n\n    return {\n        toggleDisplay,\n        removeOnSubmit,\n    };\n}\n\nfunction toggleSMSOptinAndFootnoteDisplayOnProductSelection(\n    form: HTMLFormElement,\n    key: string,\n    productValue: string\n) {\n    if (key === 'product') saveEncodedValueToLocalStorage('product', productValue);\n    const productFromLocalStorage = getDecodedValueFromLocalStorage('product');\n    const SMSoptin = form.querySelector('[data-form-extras=\"sms_opt_in\"]') as HTMLElement;\n    const SMSOptinFootnote = form.querySelector(\n        '[data-form-extras=\"sms_opt_in_footnote\"]'\n    ) as HTMLElement;\n    if (productFromLocalStorage?.toLowerCase() === 'golf') {\n        SMSoptin && (SMSoptin.style.display = 'none');\n        SMSOptinFootnote && (SMSOptinFootnote.style.display = 'none');\n    } else {\n        SMSoptin && (SMSoptin.style.display = 'block');\n        SMSOptinFootnote && (SMSOptinFootnote.style.display = 'block');\n    }\n}\n\nfunction createCodeFieldObserver(codeField: HTMLElement, form: HTMLFormElement) {\n    return new IntersectionObserver(\n        (entries, intersectionObserver) => {\n            entries.forEach(entry => {\n                if (entry.isIntersecting) {\n                    // Only fire GA4 event if the field is visible\n                    const getVisibility = (field: HTMLElement) => {\n                        return (\n                            window.getComputedStyle(field).display !== 'none' &&\n                            window.getComputedStyle(field).visibility !== 'hidden'\n                        );\n                    };\n                    const handleVisibleCodeField = () => {\n                        const formGTMObjectConstructor = new FormGTMObjectConstructor(\n                            form\n                        );\n                        GoogleTagManager.sendEvent(\n                            formGTMObjectConstructor.getFormGTMObject(\n                                'field_displayed',\n                                undefined,\n                                'zip'\n                            )\n                        );\n                        intersectionObserver.unobserve(entry.target);\n                    };\n                    if (getVisibility(codeField)) {\n                        handleVisibleCodeField();\n                    } else {\n                        new MutationObserver((mutationList, mutationObserver) => {\n                            if (mutationList.some(() => getVisibility(codeField))) {\n                                handleVisibleCodeField();\n                                mutationObserver.disconnect();\n                            }\n                        }).observe(form, {\n                            childList: true,\n                            subtree: true,\n                            attributes: true,\n                            attributeFilter: ['style', 'class'],\n                        });\n                    }\n                }\n            });\n        },\n        {\n            root: null,\n            threshold: 0.1,\n        }\n    );\n}\n\nfunction togglePostalCodeField(form: HTMLFormElement, show: boolean) {\n    const postalCodeField = form\n        .querySelector('[name=postal_code]')\n        ?.closest<HTMLElement>('.gb-form__field');\n    if (postalCodeField) {\n        const postalCodeFieldObserver = createCodeFieldObserver(postalCodeField, form);\n        if (show) {\n            postalCodeField.classList.remove('gb-hide');\n            postalCodeField.querySelector('input')?.setAttribute('required', 'true');\n            // add event listener to send GA4 event when user sees the field\n            if (postalCodeField.dataset.observing !== 'true') {\n                postalCodeFieldObserver.observe(postalCodeField);\n                postalCodeField.dataset.observing = 'true';\n            }\n        } else {\n            postalCodeField.classList.add('gb-hide');\n            postalCodeField.querySelector('input')?.removeAttribute('required');\n            postalCodeFieldObserver.unobserve(postalCodeField);\n            postalCodeField.dataset.observing = 'false';\n        }\n    }\n}\n\nfunction handleZipCodeField(form: HTMLFormElement, selectedProduct?: string) {\n    const cm = new CookieMonster();\n    const isPostalCodeEnabled = document.body.dataset.postalCode === 'enabled';\n    const userCountryCode =\n        cm.getCookie('geoConfig')?.country_code?.toLowerCase() ?? 'us';\n    const userStateCode = cm.getCookie('geoConfig')?.state_code?.toLowerCase() ?? '';\n    const enabledRegions = [{ countryCode: 'ca', stateCode: 'qc' }];\n    const userIsInEnabledRegion = enabledRegions.some(\n        region =>\n            region.countryCode === userCountryCode && region.stateCode === userStateCode\n    );\n    const isAgnosticFormButWrongProduct = Boolean(\n        form.dataset.formName?.includes('other') &&\n            (selectedProduct === undefined ||\n                (selectedProduct !== 'restaurant' && selectedProduct !== 'POSIOS'))\n    );\n\n    if (isPostalCodeEnabled && userIsInEnabledRegion && !isAgnosticFormButWrongProduct) {\n        togglePostalCodeField(form, true);\n    } else {\n        togglePostalCodeField(form, false);\n    }\n}\n\nfunction hideGolfFormOptionOnPCPages(form: HTMLFormElement) {\n    if (\n        window.location.pathname.includes('/pc/') &&\n        document.body.dataset.formHideGolfPcPages === 'enabled'\n    ) {\n        const golfButton = form.querySelector(\n            '[data-wizard-form-store-field=\"product|Golf\"]'\n        );\n        golfButton?.classList.add('tw-hidden');\n    }\n}\n\nexport {\n    handleDomainPrefixField,\n    toggleSMSOptinAndFootnoteDisplayOnProductSelection,\n    handleZipCodeField,\n    hideGolfFormOptionOnPCPages,\n};\n","import Swiper from 'swiper';\nimport { Navigation, A11y } from 'swiper/modules';\nimport FormUI from './formUI';\n\nimport { loadCaptcha } from 'root/core/tracking/recaptcha/recaptcha';\nimport { initPhoneLib } from 'root/main/components/forms/phoneInit';\nimport { LoggingHandler } from 'root/utils/errorReporting/LoggingHandler';\nimport { handleDomainPrefixField, handleZipCodeField } from 'root/helpers/formHelpers';\nimport { progressIndicator } from 'root/main/components/progressIndicator';\n\nSwiper.use([Navigation, A11y]);\n\nexport default class FormUISlider extends FormUI {\n    constructor(el) {\n        super(el);\n        this.slider = this.form.querySelector('[data-form-slider]');\n        this.nextButtonEl = this.form.querySelector('[data-form-slider-next-button]');\n        this.prevButtonEl = this.form.querySelector('.js-back-btn');\n        this.firstPanelDiv = this.form.querySelector('[data-form-panel=\"1\"]');\n        this.secondPanelDiv = this.form.querySelector('[data-form-panel=\"2\"]');\n        this.balanceTwoStepFormPanels();\n        this.firstPanelInputs = Array.from(\n            this.firstPanelDiv?.querySelectorAll(this.inputSelector)\n        );\n        this.timelineContainer = this.form.querySelector(\n            '[data-leadform-step=progress-indicator]'\n        );\n    }\n\n    fieldsArrayWithExceptionsExcluded(fields) {\n        fields = fields ?? [];\n        const exceptionArray = ['general_opt_in'];\n        return Array.from(fields).filter(\n            field => !exceptionArray.includes(field.firstElementChild.name)\n        );\n    }\n\n    balanceTwoStepFormPanels() {\n        const allFormFields = Array.from(\n            this.form.querySelectorAll(\n                '[data-leadform-steps=\"main-fields-wrapper\"] [data-formfield=ls-form-field]'\n            )\n        );\n        const adjustedFormFieldsCount = allFormFields.filter(field => {\n            return !['agnostic_business_type', 'postal_code'].includes(\n                field.querySelector('input,select').name\n            );\n        }).length;\n        let adjustedMappedFormFieldsIndexModifier = 0;\n        const assignedFormFields = allFormFields.map((field, index) => {\n            if (\n                ['agnostic_business_type', 'postal_code'].includes(\n                    field.querySelector('input,select').name\n                )\n            ) {\n                adjustedMappedFormFieldsIndexModifier++;\n            }\n            return {\n                field: field,\n                step:\n                    index - adjustedMappedFormFieldsIndexModifier <\n                    adjustedFormFieldsCount / 2\n                        ? 'first_step'\n                        : 'second_step',\n            };\n        });\n        const firstStepMainFieldsWrapper = this.firstPanelDiv?.querySelector(\n            '[data-leadform-steps=\"main-fields-wrapper\"]'\n        );\n        const secondStepMainFieldsWrapper = this.secondPanelDiv?.querySelector(\n            '[data-leadform-steps=\"main-fields-wrapper\"]'\n        );\n        if (firstStepMainFieldsWrapper && secondStepMainFieldsWrapper) {\n            assignedFormFields.forEach(({ field, step }) => {\n                if (step === 'first_step') {\n                    firstStepMainFieldsWrapper.appendChild(field);\n                } else {\n                    secondStepMainFieldsWrapper.appendChild(field);\n                }\n            });\n        }\n        this.firstPanelDiv?.classList.remove('tw-hidden');\n        this.secondPanelDiv?.classList.remove('tw-hidden');\n    }\n\n    isFirstSlideValid() {\n        const firstStepFields = this.getPanelFields(this.firstPanelDiv);\n\n        return this.fieldsArrayWithExceptionsExcluded(firstStepFields).every(field => {\n            if (field.firstElementChild.type === 'checkbox') {\n                if (field.firstElementChild.required) {\n                    return field.firstElementChild.checked;\n                } else {\n                    return true;\n                }\n            }\n            return field.querySelector(this.inputSelector)?.checkValidity();\n        });\n    }\n\n    advanceToNextSlide(e, swiper) {\n        const secondStepFields = this.getPanelFields(this.secondPanelDiv);\n\n        this.formValidationOnSubmit(e, this.firstPanelInputs);\n        if (this.isFirstSlideValid()) {\n            swiper.slideNext();\n\n            if (this.timelineContainer) {\n                progressIndicator(\n                    this.timelineContainer,\n                    1\n                ).syncProgressIndicatorToStep();\n            }\n\n            secondStepFields[0]?.focus();\n        }\n    }\n\n    reverseToPreviousSlide(swiper) {\n        const firstStepFields = this.getPanelFields(this.firstPanelDiv);\n\n        swiper.slidePrev();\n        if (this.timelineContainer) {\n            progressIndicator(this.timelineContainer, 0).syncProgressIndicatorToStep();\n        }\n        firstStepFields[0]?.focus();\n    }\n\n    makeInactiveSlidesInert(swiper) {\n        const allSlides = swiper.slides;\n        allSlides.forEach(slide => {\n            const slideIsActive = slide.classList.contains('swiper-slide-active');\n            if (slideIsActive) {\n                slide.removeAttribute('inert');\n            } else {\n                slide.setAttribute('inert', '');\n            }\n        });\n    }\n\n    getPanelFields(panel) {\n        return panel?.querySelectorAll('[data-formfield=ls-form-field]');\n    }\n\n    initSwiper() {\n        new Swiper(this.slider, {\n            slidesPerView: 1,\n            centeredSlides: true,\n            simulateTouch: false,\n            spaceBetween: 24,\n            a11y: {\n                enabled: true,\n                scrollOnFocus: false,\n            },\n            on: {\n                init: swiper => {\n                    if (this.nextButtonEl) {\n                        this.nextButtonEl.addEventListener('click', e => {\n                            this.advanceToNextSlide(e, swiper);\n                        });\n                        this.nextButtonEl.addEventListener('keydown', e => {\n                            if (\n                                e.code === 'Tab' &&\n                                !e.shiftKey &&\n                                this.isFirstSlideValid()\n                            ) {\n                                this.advanceToNextSlide(e, swiper);\n                            }\n                        });\n                    }\n\n                    if (this.prevButtonEl) {\n                        this.prevButtonEl.addEventListener('click', () => {\n                            this.reverseToPreviousSlide(swiper);\n                        });\n                    }\n                    const secondStepFields = this.getPanelFields(this.secondPanelDiv);\n                    if (secondStepFields[0]) {\n                        secondStepFields[0].addEventListener('keydown', e => {\n                            if (e.code === 'Tab' && e.shiftKey) {\n                                this.reverseToPreviousSlide(swiper);\n                            }\n                        });\n                    }\n\n                    this.makeInactiveSlidesInert(swiper);\n                },\n                slideChangeTransitionEnd: swiper => {\n                    this.makeInactiveSlidesInert(swiper);\n                },\n            },\n        });\n    }\n\n    loadFormSpecs() {\n        if (this.slider) {\n            this.balanceTwoStepFormPanels();\n            this.inputs = Array.prototype.slice.call(\n                this.form.querySelectorAll(this.inputSelector)\n            );\n            if (this.recaptchaContainer) {\n                loadCaptcha(this.form, 'formload');\n            } else {\n                this.form.classList.remove(this.hiddenFormClass);\n            }\n            this.initFieldEvents(this.inputs);\n            this.autofillBusinessTypeWithCookieValue();\n            this.autofillFormsWithLocalStorageData(this.inputs); // this should always be called BEFORE the phoneLibInit function\n            /*\n             * initPhoneLib() should always be called AFTER the autofill function. Because it affects the way that the\n             * country gets pre-selected in the phone dropdown. If initPhoneLib() gets called before the autofill, the\n             * selected country will be: either the country that the user is at OR the first country in the dropdown.\n             * However, those 2 options might not correspond with the phone number saved in the local storage.\n             * */\n            try {\n                [this.phoneLibInstance, this.phoneField] = initPhoneLib(this.form);\n            } catch (e) {\n                initPhoneLib(this.form).destroy();\n                LoggingHandler().logError(new Error(e), {\n                    searchTerm: 'phone-library-init-error',\n                    tags: ['forms', 'ui'],\n                    fileName: 'formUI.js',\n                    additionalData: {\n                        url: window.location.href,\n                    },\n                });\n            }\n            this.raisePreFilledInputLabels();\n            this.handleGooglePlacesFieldAutocomplete(\n                'address',\n                this.setDataAttributeForAddress\n            );\n            this.handleGooglePlacesFieldAutocomplete(\n                'zip',\n                this.setDataAttributeForZipCode\n            );\n            handleDomainPrefixField({\n                form: this.form,\n            }).toggleDisplay();\n            handleZipCodeField(this.form);\n\n            this.initSwiper();\n        }\n    }\n}\n","import getElementStyleProperty from 'root/utils/getElementStyleProperty';\n\nconst progressIndicator = (el: HTMLElement, currentStep: number) => {\n    const progressIndicatorEl = el?.querySelector<HTMLElement>(\n        '[data-progress-indicator]'\n    );\n    const validClassName = 'js-progress-indicator-checked';\n    const validateAllEarlierSteps = () => {\n        const steps =\n            el?.querySelectorAll<HTMLElement>('[data-progress-indicator-step-valid]') ||\n            [];\n        for (const step of steps) {\n            if (Number(step.dataset.progressIndicatorStepValid) < currentStep) {\n                step.classList.add(validClassName);\n            }\n        }\n    };\n    const validateFormStep = () => {\n        const numberOfSlides = Number(\n            progressIndicatorEl?.dataset.progressIndicatorStepsTotal\n        );\n        if (numberOfSlides) {\n            const progressIndicatorLastStep = progressIndicatorEl?.querySelector(\n                `[data-progress-indicator-step-valid=\"${numberOfSlides - 1}\"]`\n            );\n            const endForm =\n                el.closest<HTMLElement>('[data-form-all-fields-valid]') ||\n                el.querySelector<HTMLElement>('[data-form-all-fields-valid]');\n            const form = el.closest('[data-form=ls-form-steps]');\n            const progressIndicatorFirstStep = progressIndicatorEl?.querySelector(\n                `[data-progress-indicator-step-valid=\"0\"]`\n            );\n            const isFormFieldsValid = endForm?.dataset.formAllFieldsValid === 'true';\n            const validatePrepopulatedForm = () => {\n                if (isFormFieldsValid && numberOfSlides === currentStep + 1) {\n                    progressIndicatorLastStep?.classList.add(validClassName);\n                }\n            };\n            const validateFormOnCustomEvent = () => {\n                return endForm?.addEventListener('formFieldsValid', () => {\n                    progressIndicatorLastStep?.classList.add(validClassName);\n                });\n            };\n            const validateFormOnFirstStepValid = () => {\n                return form?.addEventListener('firstStepFieldsValid', () => {\n                    progressIndicatorFirstStep?.classList.add(validClassName);\n                });\n            };\n            return {\n                validatePrepopulatedForm,\n                validateFormOnCustomEvent,\n                validateFormOnFirstStepValid,\n            };\n        }\n    };\n    const syncProgressIndicatorToStep = () => {\n        if (progressIndicatorEl) {\n            if (currentStep - 1 >= 0) {\n                validateAllEarlierSteps();\n                validateFormStep()?.validatePrepopulatedForm();\n                validateFormStep()?.validateFormOnCustomEvent();\n            }\n\n            if (currentStep === 0) {\n                validateFormStep()?.validateFormOnFirstStepValid();\n            }\n\n            const progressIndicatorWidth = progressIndicatorEl.querySelector<HTMLElement>(\n                '[data-progress-indicator-width]'\n            );\n            const labelWidth = progressIndicatorEl.querySelector<HTMLElement>(\n                '[data-progress-indicator-label-width]'\n            );\n\n            if (progressIndicatorWidth) {\n                progressIndicatorWidth.style.width = `calc(${currentStep} * ${getElementStyleProperty(\n                    '--width',\n                    progressIndicatorEl\n                )} + ${getElementStyleProperty('--height', progressIndicatorEl)})`;\n            }\n\n            if (labelWidth) {\n                labelWidth.style.width = `calc((${getElementStyleProperty(\n                    '--width',\n                    progressIndicatorEl\n                )} + ${getElementStyleProperty(\n                    '--offset',\n                    progressIndicatorEl\n                )})  * (${currentStep} + 1))`;\n            }\n        }\n    };\n    return {\n        syncProgressIndicatorToStep,\n        progressIndicatorEl,\n    };\n};\n\nexport { progressIndicator };\n","import { gtm } from 'root/utils/tracking/googleTagManagerDeprecated';\n\nconst toggleSwitch = ({ checkedCallback, uncheckedCallback }) => {\n    /**\n     *\n     * @param toggleSwitchTextOff\n     * @param toggleSwitchTextOn\n     */\n    const handleTextAppearanceForOnState = ({\n        toggleSwitchTextOff,\n        toggleSwitchTextOn,\n    }) => {\n        toggleSwitchTextOn &&\n            toggleSwitchTextOn.classList.add('js-toggle-switch-enabled');\n        toggleSwitchTextOff &&\n            toggleSwitchTextOff.classList.remove('js-toggle-switch-enabled');\n        checkedCallback();\n        gtm.pricingPaymentsToggle('payments').sendEvent('toggle');\n    };\n\n    /**\n     *\n     * @param toggleSwitchTextOff\n     * @param toggleSwitchTextOn\n     */\n    const handleTextAppearanceForOffState = ({\n        toggleSwitchTextOff,\n        toggleSwitchTextOn,\n    }) => {\n        toggleSwitchTextOn &&\n            toggleSwitchTextOn.classList.remove('js-toggle-switch-enabled');\n        toggleSwitchTextOff &&\n            toggleSwitchTextOff.classList.add('js-toggle-switch-enabled');\n        uncheckedCallback();\n        gtm.pricingPaymentsToggle('payments').sendEvent('toggle');\n    };\n\n    /**\n     * Groups the selectors together for easier usages\n     * @param toggleSwitch\n     * @returns {{toggleSwitchButton: *, toggleSwitchTextOff: *, toggleSwitchTextOn: *, toggleSwitchInput: *}}\n     */\n    const toggleSwitchSelectors = toggleSwitch => {\n        const toggleSwitchInput = toggleSwitch.querySelector(\n            '[type=checkbox][data-toggle-switch-input]'\n        );\n        const toggleSwitchButton = toggleSwitch.querySelector(\n            '[type=checkbox][data-toggle-switch-button]'\n        );\n        const toggleSwitchTextOff = toggleSwitch.querySelector(\n            '[data-toggle-switch-text=off]'\n        );\n        const toggleSwitchTextOn = toggleSwitch.querySelector(\n            '[data-toggle-switch-text=on]'\n        );\n        return {\n            toggleSwitchInput,\n            toggleSwitchButton,\n            toggleSwitchTextOff,\n            toggleSwitchTextOn,\n        };\n    };\n\n    function ariaCheckedOn(ts) {\n        return ts.toggleSwitchInput.setAttribute('aria-checked', 'true');\n    }\n    function ariaCheckedOFF(ts) {\n        return ts.toggleSwitchInput.setAttribute('aria-checked', 'false');\n    }\n    /**\n     * Enable/disable text appearance based on the toggle switch state\n     * The background styling of the toggle switch is handled by CSS here html/wp-content/themes/ls/dev/sass/private/ui/_toggle-switch.scss\n     * @param ts\n     * @param e\n     */\n    function toggleEventHandler(ts, e) {\n        if (e.currentTarget.checked) {\n            handleTextAppearanceForOnState(ts);\n            ariaCheckedOn(ts);\n        } else {\n            handleTextAppearanceForOffState(ts);\n            ariaCheckedOFF(ts);\n        }\n    }\n\n    const eventListener = toggleSwitch => {\n        if (toggleSwitch) {\n            const ts = toggleSwitchSelectors(toggleSwitch);\n            ts.toggleSwitchInput &&\n                ts.toggleSwitchInput.addEventListener(\n                    'click',\n                    toggleEventHandler.bind(this, ts)\n                );\n        }\n    };\n\n    const init = () => {\n        const toggleSwitches = document.querySelectorAll(\n            '[data-toggle-switch=container]'\n        );\n\n        if (toggleSwitches.length > 0) {\n            toggleSwitches.forEach(toggleSwitch => {\n                eventListener(toggleSwitch);\n            });\n        }\n    };\n\n    return {\n        init,\n    };\n};\nexport default toggleSwitch;\n","import { LoggingHandler } from 'root/utils/errorReporting/LoggingHandler';\n\nexport default function tooltipOpener(tooltips) {\n    const tooltipDisplayClass = 'js-show-tooltip-dialog';\n    const handleEscKeyEvent = () => {\n        // this closes the tooltip when the user presses \"esc\" or \"tab\"\n        document.addEventListener('keydown', e => {\n            if (e.code === 'Escape' || e.code === 'Tab') {\n                closeTooltips();\n            }\n        });\n    };\n    const handleDocumentClickEvent = () => {\n        document.addEventListener('click', e => {\n            // this hides the tooltip when the user clicks outside the dialog\n            if (\n                e.target.dataset.tooltip !== 'dialog' &&\n                e.target.dataset.tooltip !== 'button' &&\n                e.target.dataset.tooltip !== 'tabtrap-element' &&\n                e.target.dataset.tooltip !== 'svg' &&\n                e.target.dataset.tooltip !== 'path'\n            ) {\n                closeTooltips();\n            }\n        });\n    };\n    const handleTooltipButtonClick = (tooltip, tooltipButton) => {\n        /*\n         * This toggles the tooltip when the user clicks the open tooltip button.\n         * When a user presses \"enter\" or \"space\" a click event gets triggered,\n         * so this covers that part of the keyboard interaction as well\n         * */\n        tooltipButton.addEventListener('click', () => {\n            if (tooltip.classList.contains(tooltipDisplayClass)) {\n                tooltip.classList.remove(tooltipDisplayClass);\n            } else {\n                closeTooltips();\n                tooltip.classList.add(tooltipDisplayClass);\n                // @email-hook change\n                // logging added to track how often these tooltips are clicked on during the test\n                LoggingHandler().logUserAction('User opened the tooltip', {\n                    searchTerm: 'tooltip-opened',\n                    tags: ['tooltip'],\n                    fileName: 'tooltip.js',\n                });\n            }\n        });\n    };\n    const closeTooltips = () => {\n        // this const finds all tooltips that have a js-show-tooltip-dialog class\n        const openTooltips = Array.from(tooltips).filter(tooltip =>\n            tooltip.classList.contains(tooltipDisplayClass)\n        );\n        if (openTooltips) {\n            openTooltips.forEach(openTooltip => {\n                openTooltip.classList.remove(tooltipDisplayClass);\n            });\n        }\n    };\n\n    if (tooltips) {\n        Array.from(tooltips).forEach(tooltip => {\n            const tooltipButton = tooltip.querySelector('[data-tooltip=button]');\n            const tooltipDialog = tooltip.querySelector('[data-tooltip=dialog]');\n            if (tooltipButton && tooltipDialog) {\n                handleEscKeyEvent();\n                handleDocumentClickEvent();\n                handleTooltipButtonClick(tooltip, tooltipButton);\n            }\n        });\n    }\n}\n","/*\nXXX_JSREFACTOR_XXX\ntodo @JSREFACTOR\n- write tests for this and refactor\n- consider if the \"toggle features table\" functionality is really necessary (the ux is a bit strange)\n*/\n\n// open pricing features table here: https://www.lightspeedhq.nl/ecommerce/prijzen/,\n// click on \"Bekijk de mogelijkheden\" to see the table\n\nimport { getParamValueFromUrl } from 'root/utils/URLParams/URLParams';\nimport toggleSwitch from 'root/main/components/toggleSwitch/toggleSwitch';\nimport { capitalize } from 'lodash';\nimport Swiper from 'swiper';\nimport { Thumbs, Keyboard, A11y } from 'swiper/modules';\nimport { gtm } from 'root/utils/tracking/googleTagManagerDeprecated';\nimport { CookieMonster } from 'root/utils/cookies/cookieMonster';\nimport names from 'root/global_configs/names.json';\n\nexport default function legacyPricing() {\n    const featureTable = document.querySelector('[data-js=\"pricing-ecom-table\"]');\n    if (featureTable) {\n        (function () {\n            const openFeatures = () => {\n                featureTable.classList.add('js-open-table');\n            };\n\n            const closeFeatures = () => {\n                featureTable.classList.remove('js-open-table');\n            };\n\n            const toggleFeatures = () => {\n                if (featureTable.classList.contains('js-open-table')) {\n                    closeFeatures();\n                } else {\n                    openFeatures();\n                }\n            };\n\n            const scrollToTableHeader = () => {\n                var bodyRect = document.body.getBoundingClientRect(),\n                    elemRect = featureTable.getBoundingClientRect(),\n                    offset = elemRect.top - bodyRect.top - 300;\n\n                window.scrollTo(0, offset);\n                openFeatures();\n            };\n\n            const addListeners = () => {\n                var pricingTableHandler = document.querySelector(\n                    '.js-open-pricing-table'\n                );\n                if (pricingTableHandler && pricingTableHandler !== undefined) {\n                    pricingTableHandler.addEventListener(\n                        'click',\n                        function () {\n                            toggleFeatures();\n                        }.bind(this)\n                    );\n                }\n            };\n\n            const featureTableDisplayHandler = () => {\n                const param = getParamValueFromUrl('pricing-table');\n                if (param === 'open') {\n                    if ('scrollRestoration' in history) {\n                        history.scrollRestoration = 'manual';\n                    }\n                    scrollToTableHeader();\n                }\n                addListeners();\n            };\n\n            return {\n                init: featureTableDisplayHandler,\n            };\n        })().init();\n    }\n\n    const pricingTable = document.querySelector('[data-pricing-table=container]');\n    let tweenDisplay;\n\n    /**\n     * This will show/hide an element after manipulating the opacity which transition is set in CSS\n     * @param els\n     * @param status\n     */\n    const toggleDisplay = (els, status) => {\n        if (els.length > 0) {\n            const opacityMap = {\n                'none': 0,\n                'inline-block': 1,\n            };\n            els.forEach(el => {\n                if (el) {\n                    el.style.opacity = opacityMap[status];\n                    tweenDisplay = setTimeout(() => {\n                        el.style.display = status;\n                    }, 240);\n                }\n            });\n        }\n    };\n\n    /**\n     * This will add/remove a disabled class on an element. The js-pricing-disabled class changes the color of the element\n     * @param els\n     * @param status\n     */\n    const toggleClassList = (els, status) => {\n        if (els.length > 0) {\n            els.forEach(el => {\n                if (el) {\n                    el.classList[status]('js-pricing-disabled');\n                }\n            });\n        }\n    };\n\n    /**\n     * This is returning an object with 2 functions.\n     * The object will be passed to the toggleSwitch function which accept 2 callbacks;\n     * one for the checked state and the other for the unchecked one.\n     * @param pricingTable\n     * @returns {{checkedCallback: checkedCallback, uncheckedCallback: uncheckedCallback}}\n     */\n    const toggleCallback = pricingTable => {\n        const hiddenEls = pricingTable.querySelectorAll('[data-pricing-display=hidden]');\n        const visibleEls = pricingTable.querySelectorAll(\n            '[data-pricing-display=visible]'\n        );\n        const paymentsEls = pricingTable.querySelectorAll('[data-pricing-payments=true]');\n\n        const checkedCallback = () => {\n            toggleDisplay(hiddenEls, 'none');\n            toggleDisplay(visibleEls, 'inline-block');\n            toggleClassList(paymentsEls, 'remove');\n        };\n        const uncheckedCallback = () => {\n            toggleDisplay(hiddenEls, 'inline-block');\n            toggleDisplay(visibleEls, 'none');\n            toggleClassList(paymentsEls, 'add');\n        };\n\n        clearTimeout(tweenDisplay);\n\n        return {\n            checkedCallback,\n            uncheckedCallback,\n        };\n    };\n\n    if (pricingTable) {\n        /* Using the toggleSwitch function we are passing toggleCallback which is returning an object which has 2 callback.\n        the first callback handles the appearance of the elements on the pricing page when the toggle is checked (turned on)\n        and the second callback handles the appearance of the elements on the pricing page when the toggle is unchecked (turned off)\n        */\n        toggleSwitch(toggleCallback(pricingTable)).init();\n    }\n\n    const getPaymentToggleState = pricingTable => {\n        return pricingTable.querySelector('.js-toggle-switch-enabled')\n            ? 'payments'\n            : 'noPayments';\n    };\n\n    const getPaymentFrequencyToggleState = pricingTable => {\n        return capitalize(\n            pricingTable?.querySelector('[data-tab-active=true]')?.dataset.tab\n        );\n    };\n\n    const showCorrectPricingDisplay = pricingTable => {\n        const paymentToggleState = getPaymentToggleState(pricingTable);\n\n        const paymentFrequencyToggleState = getPaymentFrequencyToggleState(pricingTable);\n\n        toggleVisibilityOfCheckmarks();\n\n        const priceEls = pricingTable.querySelectorAll('[data-pricing-display-numbers]');\n        priceEls.forEach(priceEl => {\n            const priceMap = JSON.parse(priceEl.dataset.pricingDisplayNumbers);\n            priceEl.innerHTML =\n                priceMap[`${paymentToggleState}${paymentFrequencyToggleState}`];\n        });\n    };\n\n    const pricingTableWithWizard = document.querySelector(\n        '[data-pricing-table-wizard=container]'\n    );\n\n    /**\n     * This is returning an object with 2 functions.\n     * The object will be passed to the toggleSwitch function which accept 2 callbacks;\n     * one for the checked state and the other for the unchecked one.\n     * @param pricingTableWithWizard\n     * @returns {{checkedCallback: checkedCallback, uncheckedCallback: uncheckedCallback}}\n     */\n    const toggleCallbackOnPricingTableWithWizard = pricingTableWithWizard => {\n        const paymentsEls = pricingTableWithWizard.querySelectorAll(\n            '[data-pricing-payments=true]'\n        );\n\n        const checkedCallback = () => {\n            showCorrectPricingDisplay(pricingTableWithWizard);\n            toggleClassList(paymentsEls, 'remove');\n        };\n        const uncheckedCallback = () => {\n            showCorrectPricingDisplay(pricingTableWithWizard);\n            toggleClassList(paymentsEls, 'add');\n        };\n\n        clearTimeout(tweenDisplay);\n\n        return {\n            checkedCallback,\n            uncheckedCallback,\n        };\n    };\n\n    const deactivateTabButtons = tabButtons => {\n        tabButtons.forEach(tabButton => {\n            tabButton.dataset.tabActive = 'false';\n            tabButton.setAttribute('aria-selected', 'false');\n        });\n    };\n\n    const initializePaymentFrequencyToggle = pricingTableWithWizard => {\n        const tabButtons = pricingTableWithWizard.querySelectorAll('[data-tab]');\n        tabButtons.forEach(tabButton => {\n            tabButton.addEventListener('click', () => {\n                deactivateTabButtons(tabButtons);\n                tabButton.dataset.tabActive = 'true';\n                tabButton.setAttribute('aria-selected', 'true');\n                showCorrectPricingDisplay(pricingTableWithWizard);\n            });\n        });\n    };\n\n    if (pricingTableWithWizard) {\n        const cm = new CookieMonster();\n        const buttons = pricingTableWithWizard.querySelectorAll('[data-pricing-label]');\n        buttons.forEach(button => {\n            return button.addEventListener('click', e => {\n                window.registerCookieComplianceCallback(() => {\n                    e.currentTarget.dataset.pricingLabel &&\n                        cm.setCookie(\n                            names.cookies.pricingPlan,\n                            e.currentTarget.dataset.pricingLabel\n                        );\n                }, 'functional');\n                window.OptanonWrapper();\n            });\n        });\n\n        const swiperThumbs = new Swiper('[data-master-slider=slider-thumbs]', {\n            modules: [Keyboard, A11y],\n            direction: 'horizontal',\n            loop: false,\n            slidesPerView: 3,\n            autoScrollOffset: 4,\n            spaceBetween: 10,\n            allowTouchMove: true,\n            simulateTouch: true,\n            keyboard: {\n                enabled: true,\n                onlyInViewport: false,\n            },\n            a11y: {\n                enabled: true,\n            },\n        });\n        const swiper = new Swiper('[data-master-slider=slider]', {\n            modules: [Keyboard, Thumbs, A11y],\n            direction: 'horizontal',\n            loop: true,\n            slidesPerView: 1,\n            spaceBetween: 10,\n            allowTouchMove: true,\n            simulateTouch: true,\n            thumbs: {\n                swiper: swiperThumbs,\n            },\n            on: {\n                slideChange: function () {\n                    gtm.slider('').sendEvent('slide-change');\n                },\n            },\n            keyboard: {\n                enabled: true,\n                onlyInViewport: false,\n            },\n            a11y: {\n                enabled: true,\n            },\n        });\n\n        (function hideFirstPrevSlide() {\n            const swiperWrapper = pricingTableWithWizard.querySelector(\n                '[data-master-slider=slider] > .swiper-wrapper'\n            );\n            const prevFirstSlide =\n                swiperWrapper && swiperWrapper.querySelector('.swiper-slide-prev');\n\n            prevFirstSlide && prevFirstSlide.classList.add('js-hide-first-prev-slide');\n\n            swiperWrapper &&\n                swiperWrapper.addEventListener('transitionend', e => {\n                    const previousSlide = e.currentTarget.querySelector('.swiper-slide');\n                    if (\n                        previousSlide.classList.contains('js-hide-first-prev-slide') &&\n                        e.propertyName === 'transform'\n                    )\n                        previousSlide &&\n                            previousSlide.classList.remove('js-hide-first-prev-slide');\n                });\n        })();\n\n        (function triggerSliderNavigationOnThumbsMenuKeyboardInteraction(\n            el,\n            swiperThumbs\n        ) {\n            swiperThumbs?.$el?.on('keydown', e => {\n                /* This is a workaround for a missing option as highlighted here https://github.com/nolimits4web/swiper/issues/4324 */\n                if (e.code !== 'Enter' && e.code !== 'Space') return;\n                const slideIndex = e.target.dataset.pricingWizardSliderSlideIndex;\n                slideIndex &&\n                    (swiperThumbs.slideTo(slideIndex), swiper.slideTo(slideIndex));\n            });\n        })(pricingTableWithWizard, swiperThumbs, swiper);\n\n        /* Using the toggleSwitch function we are passing toggleCallback which is returning an object which has 2 callback.\n        the first callback handles the appearance of the elements on the pricing page when the toggle is checked (turned on)\n        and the second callback handles the appearance of the elements on the pricing page when the toggle is unchecked (turned off)\n        The initializePaymentFrequencyToggle does the same for the tabs on the pricing table with wizard.\n        */\n        initializePaymentFrequencyToggle(pricingTableWithWizard);\n        toggleSwitch(\n            toggleCallbackOnPricingTableWithWizard(pricingTableWithWizard)\n        ).init();\n    }\n\n    // add trigger here for the display and hiding of the checkmarks\n    document.addEventListener('DOMContentLoaded', () => {\n        toggleVisibilityOfCheckmarks();\n    });\n\n    const toggleVisibilityOfCheckmarks = () => {\n        // grabs toggle state\n        const paymentFrequency =\n            getPaymentFrequencyToggleState(pricingTableWithWizard).toLowerCase();\n\n        // grabs table\n        const pricingTableWrappers = document.querySelectorAll(\n            '.pricing-table-with-wizard__wrapper'\n        );\n        let visibleTable;\n\n        pricingTableWrappers.forEach(t => {\n            if (window.getComputedStyle(t, null).display !== 'none') {\n                visibleTable = t;\n            }\n        });\n\n        // grabs checkmarks\n        const monthly = visibleTable?.querySelectorAll('[data-show-monthly=\"on\"]');\n        const annually = visibleTable?.querySelectorAll('[data-show-annually=\"on\"]');\n\n        // compares toggle state with data-attributes and shows appropriate checkmarks\n        if (paymentFrequency === 'monthly') {\n            annually.forEach(e => {\n                e.style.display = 'none';\n            });\n            monthly.forEach(e => {\n                e.style.display = 'list-item';\n            });\n        }\n\n        if (paymentFrequency === 'yearly') {\n            monthly.forEach(e => {\n                e.style.display = 'none';\n            });\n            annually.forEach(e => {\n                e.style.display = 'list-item';\n            });\n        }\n    };\n}\n","import Swiper from 'swiper';\nimport { A11y, Keyboard, Thumbs } from 'swiper/modules';\nimport { gtm } from 'root/utils/tracking/googleTagManagerDeprecated';\n\nconst buildMobileSwipers = table => {\n    const swiperThumbs = new Swiper('[data-master-slider=slider-thumbs]', {\n        modules: [Keyboard, A11y],\n        direction: 'horizontal',\n        loop: false,\n        slidesPerView: 3,\n        autoScrollOffset: 4,\n        spaceBetween: 10,\n        allowTouchMove: true,\n        simulateTouch: true,\n        keyboard: {\n            enabled: true,\n            onlyInViewport: false,\n        },\n        a11y: {\n            enabled: true,\n        },\n    });\n\n    const swiper = new Swiper('[data-master-slider=slider]', {\n        modules: [Keyboard, Thumbs, A11y],\n        direction: 'horizontal',\n        loop: true,\n        slidesPerView: 1,\n        spaceBetween: 10,\n        allowTouchMove: true,\n        simulateTouch: true,\n        thumbs: {\n            swiper: swiperThumbs,\n        },\n        on: {\n            slideChange: function () {\n                gtm.slider('').sendEvent('slide-change');\n            },\n        },\n        keyboard: {\n            enabled: true,\n            onlyInViewport: false,\n        },\n        a11y: {\n            enabled: true,\n        },\n    });\n\n    (function hideFirstPrevSlide() {\n        const swiperWrapper = table?.querySelector(\n            '[data-master-slider=slider] > .swiper-wrapper'\n        );\n        const prevFirstSlide =\n            swiperWrapper && swiperWrapper.querySelector('.swiper-slide-prev');\n\n        prevFirstSlide && prevFirstSlide.classList.add('js-hide-first-prev-slide');\n\n        swiperWrapper &&\n            swiperWrapper.addEventListener('transitionend', e => {\n                const previousSlide = e.currentTarget.querySelector('.swiper-slide');\n\n                if (\n                    previousSlide.classList.contains('js-hide-first-prev-slide') &&\n                    e.propertyName === 'transform'\n                ) {\n                    previousSlide &&\n                        previousSlide.classList.remove('js-hide-first-prev-slide');\n                }\n            });\n    })();\n\n    (function triggerSliderNavigationOnThumbsMenuKeyboardInteraction(\n        swiperThumbs,\n        swiper\n    ) {\n        // prevents issue described here https://github.com/nolimits4web/swiper/issues/4324\n        swiperThumbs.$el?.on('keydown', e => {\n            // this is a workaround for a missing option as highlighted here https://github.com/nolimits4web/swiper/issues/4324\n            if (e.code !== 'Enter' && e.code !== 'Space') {\n                return;\n            }\n            const slideIndex = e.target.dataset.pricingWizardSliderSlideIndex;\n            slideIndex && (swiperThumbs.slideTo(slideIndex), swiper.slideTo(slideIndex));\n        });\n    })(swiperThumbs, swiper);\n};\n\nexport { buildMobileSwipers };\n","import {\n    PaymentsEnums,\n    PaymentsOptionsStateEnum,\n    SelectedLocationDataInterface,\n} from 'root/page/pricing/retailLocalizationPricing/pricingLocationTypes';\nimport { LoggingHandler } from 'root/utils/errorReporting/LoggingHandler';\n\ninterface PaymentsToggleStateInterface {\n    isVisible: boolean;\n    paymentsStatusValue: PaymentsEnums;\n}\n\nconst checkForPaymentsLexicValues = (\n    selectedLocationData: SelectedLocationDataInterface\n): PaymentsOptionsStateEnum => {\n    const paymentsSpecs = {\n        without: PaymentsEnums.without,\n        with: PaymentsEnums.with,\n    };\n\n    const isLexicFilledOut = (paymentsSpec: PaymentsEnums) => {\n        try {\n            return (\n                selectedLocationData[paymentsSpec] &&\n                Object.values(selectedLocationData[paymentsSpec]).every(\n                    (plan: Record<string, string>) => {\n                        return plan?.annually !== '' && plan?.monthly !== '';\n                    }\n                )\n            );\n        } catch (error) {\n            LoggingHandler().logError('paymentsSpec', {\n                searchTerm: 'lexic-pricing-filter-payments',\n                fileName: 'checkForPaymentsLexicValues.ts',\n                tags: ['pricing', 'lexic'],\n                additionalData: {\n                    error_detail: `lexic sections for ${paymentsSpec} is set!`,\n                    lexic_data: selectedLocationData,\n                    error,\n                },\n            });\n            return false;\n        }\n    };\n\n    const switchPaymentsSpecs = (paymentsSpec: PaymentsEnums) =>\n        paymentsSpecs.without === paymentsSpec\n            ? paymentsSpecs.with\n            : paymentsSpecs.without;\n\n    const isBothFilledOut = isLexicFilledOut(switchPaymentsSpecs(paymentsSpecs.with));\n\n    if (isLexicFilledOut(paymentsSpecs.with)) {\n        if (isBothFilledOut) {\n            return PaymentsOptionsStateEnum.optional;\n        } else {\n            return PaymentsOptionsStateEnum.default;\n        }\n    } else {\n        // if one is empty try to check if the other is filled out\n        const tryTheOtherOne = switchPaymentsSpecs(paymentsSpecs.with);\n        if (isLexicFilledOut(tryTheOtherOne)) {\n            return PaymentsOptionsStateEnum.notAvail;\n        } else {\n            // if both are empty, report it\n            LoggingHandler().logError('paymentsSpec', {\n                searchTerm: 'lexic-pricing-filter-payments',\n                fileName: 'checkForPaymentsLexicValues.ts',\n                tags: ['pricing', 'lexic'],\n                additionalData: {\n                    error_detail: `lexic sections for ${paymentsSpecs.without} and ${paymentsSpecs.with} are empty!`,\n                    lexic_data: selectedLocationData,\n                },\n            });\n            return PaymentsOptionsStateEnum.notSet;\n        }\n    }\n};\n\nfunction pricingPaymentsToggle(pricingTable: HTMLElement) {\n    const paymentsSpecs = {\n        without: PaymentsEnums.without,\n        with: PaymentsEnums.with,\n    };\n    let isToggleSwitchedOn = true;\n    const paymentsToggleSection = pricingTable?.querySelector('[data-toggle-switch]');\n\n    const toggleContainerElement: HTMLElement | null | undefined =\n        paymentsToggleSection?.querySelector('[data-toggle-switch-switch-container]');\n\n    const toggleButton = paymentsToggleSection?.querySelector(\n        '[data-toggle-switch-button]'\n    );\n\n    const toggleInput: HTMLFormElement | null = document.querySelector(\n        '[data-toggle-switch-input]'\n    );\n\n    if (toggleInput) toggleInput.type = 'radio';\n\n    let paymentsToggleState: PaymentsEnums = paymentsSpecs.with;\n\n    const updateToggleUIStateOnToggle = () => {\n        if (toggleContainerElement) {\n            const switchOff = () => {\n                toggleContainerElement.classList.remove(\n                    'toggle-switch__switch__container'\n                );\n                isToggleSwitchedOn = false;\n            };\n\n            const switchOn = () => {\n                toggleContainerElement.classList.add('toggle-switch__switch__container');\n                isToggleSwitchedOn = true;\n            };\n\n            toggleContainerElement.classList.contains('toggle-switch__switch__container')\n                ? switchOff()\n                : switchOn();\n        }\n    };\n\n    const controlPaymentsToggleDisplayAndState = (\n        selectedLocationData: SelectedLocationDataInterface\n    ) => {\n        // return not_set if none of the payments options were selected\n        const paymentsOptionState: PaymentsOptionsStateEnum =\n            selectedLocationData?.payments_option &&\n            typeof selectedLocationData?.payments_option === 'string'\n                ? (selectedLocationData.payments_option as PaymentsOptionsStateEnum)\n                : PaymentsOptionsStateEnum.notSet;\n\n        const { paymentsStatusValue, isVisible } =\n            getPaymentsToggleState()[paymentsOptionState];\n\n        if (paymentsOptionState === PaymentsOptionsStateEnum.notSet) {\n            const { paymentsStatusValue, isVisible } =\n                getPaymentsToggleState()[\n                    checkForPaymentsLexicValues(selectedLocationData)\n                ];\n            paymentsToggleState = paymentsStatusValue;\n            togglePaymentsToggleDisplay(isVisible);\n        } else {\n            paymentsToggleState = paymentsStatusValue;\n            togglePaymentsToggleDisplay(isVisible);\n        }\n\n        return paymentsToggleState;\n    };\n\n    const changePaymentsToggleStateBasedOnInteraction = (): PaymentsEnums => {\n        if (isToggleSwitchedOn) {\n            paymentsToggleState = paymentsSpecs.with;\n        } else {\n            paymentsToggleState = paymentsSpecs.without;\n        }\n\n        return paymentsToggleState;\n    };\n\n    const getPaymentsToggleState = (): Record<\n        PaymentsOptionsStateEnum,\n        PaymentsToggleStateInterface\n    > => {\n        return {\n            default: {\n                isVisible: false,\n                paymentsStatusValue: paymentsSpecs.with,\n            },\n            optional: {\n                isVisible: true,\n                paymentsStatusValue: changePaymentsToggleStateBasedOnInteraction(),\n            },\n            not_available: {\n                isVisible: false,\n                paymentsStatusValue: paymentsSpecs.without,\n            },\n            not_set: {\n                isVisible: false,\n                paymentsStatusValue: paymentsSpecs.without,\n            },\n        };\n    };\n\n    const togglePaymentsToggleDisplay = (isVisible: boolean) => {\n        const displayStatus = isVisible ? 'remove' : 'add';\n        paymentsToggleSection?.classList[displayStatus]('gb-hide');\n    };\n\n    return {\n        controlPaymentsToggleDisplayAndState,\n        updateToggleUIStateOnToggle,\n        toggleButton,\n        toggleCSSLogic: toggleContainerElement,\n        paymentsSpecs,\n    };\n}\nexport { pricingPaymentsToggle as default, checkForPaymentsLexicValues };\n","import {\n    SelectedLocationDataInterface,\n    PaymentsEnums,\n    PaymentsOptionsStateEnum,\n} from 'root/page/pricing/retailLocalizationPricing/pricingLocationTypes';\n\ninterface CellStateInterface {\n    apply: (\n        isAvailable?: boolean,\n        isEnabled?: boolean,\n        showLightspeedPaymentsCardRateRow?: boolean\n    ) => void;\n}\nconst setCellState = (\n    rowEl: HTMLElement | undefined,\n    cellElementOrCollection: NodeList | HTMLElement | undefined,\n    cellValue = 'checkmark',\n    isHidden = false\n) => {\n    const className =\n        cellValue === 'checkmark' ? 'js-pricing-disabled' : 'js-text-disabled';\n    function apply(isAvailable = true, isEnabled = true) {\n        if (isAvailable) {\n            if (cellElementOrCollection instanceof NodeList) {\n                cellElementOrCollection?.forEach((el: HTMLElement) => {\n                    el.classList.toggle(className, !isEnabled);\n                    cellValue && cellValue !== 'checkmark' && (el.innerHTML = cellValue);\n                });\n            }\n            if (cellElementOrCollection instanceof HTMLElement) {\n                cellElementOrCollection.classList.toggle(className, !isEnabled);\n                cellValue &&\n                    cellValue !== 'checkmark' &&\n                    (cellElementOrCollection.innerHTML = cellValue);\n            }\n\n            if (typeof cellElementOrCollection === 'undefined') {\n                rowEl && (rowEl.style.display = 'none');\n            } else {\n                const display = isHidden ? 'none' : 'grid';\n                rowEl && (rowEl.style.display = display);\n            }\n        } else {\n            rowEl && (rowEl.style.display = 'none');\n        }\n    }\n    return {\n        apply,\n    };\n};\n\nconst cellStateSwitch = (\n    selectedLocationData: SelectedLocationDataInterface,\n    paymentsToggleState: PaymentsEnums,\n    cellState: CellStateInterface\n) => {\n    switch (selectedLocationData.payments_option as PaymentsOptionsStateEnum) {\n        case PaymentsOptionsStateEnum.default:\n            cellState.apply(true, true);\n            break;\n        case PaymentsOptionsStateEnum.optional:\n            if (paymentsToggleState === PaymentsEnums.with) {\n                cellState.apply(true, true);\n            } else {\n                cellState.apply(true, false);\n            }\n            break;\n        case PaymentsOptionsStateEnum.notAvail:\n            cellState.apply(false, false);\n            break;\n        default:\n            // if no payments_option option was selected\n            if (paymentsToggleState === PaymentsEnums.with) {\n                cellState.apply();\n            } else {\n                cellState.apply(true, false);\n            }\n    }\n};\n\nexport { setCellState, cellStateSwitch };\n","import { getLocationSelector } from 'root/page/pricing/retailLocalizationPricing/pricingLocationSelector';\nimport { buildMobileSwipers } from 'root/page/pricing/retailLocalizationPricing/buildSwiper';\nimport pricingPaymentsToggle from 'root/page/pricing/retailLocalizationPricing/pricingPaymentsToggle';\nimport pricingTableTabs from 'root/page/pricing/retailLocalizationPricing/pricingTableTabs';\nimport {\n    setCellState,\n    cellStateSwitch,\n} from 'root/page/pricing/retailLocalizationPricing/helpers/controlCellState';\nimport { GeoMonster } from 'root/utils/cookies/geoMonster';\n\nfunction index(lexicData) {\n    // ---------- HTML ELEMENTS ----------\n    const pricingTable = document.querySelector('[data-pricing-table-wizard=container]');\n\n    const desktopTable = pricingTable?.querySelector(\n        '[data-pricing-table-with-wizard-wrapper-desktop]'\n    );\n\n    const {\n        locationSelector,\n        populateLocationSelectorWithOptionsFromLexic,\n        getLocationSelectorLocationData,\n    } = getLocationSelector(pricingTable);\n\n    const {\n        controlPaymentsToggleDisplayAndState,\n        updateToggleUIStateOnToggle,\n        toggleButton,\n    } = pricingPaymentsToggle(pricingTable);\n\n    const { tabs, getActiveTab, updateActiveTab } = pricingTableTabs(pricingTable);\n\n    const numberInputs = pricingTable?.querySelectorAll(\n        '[data-filtering-number-registers], [data-filtering-number-locations]'\n    );\n\n    // ---------- FUNCTIONS ----------\n    const updatePrices = (\n        selectedLocationData,\n        paymentsToggleState,\n        tabSelectedPeriod\n    ) => {\n        const tableHeaders = pricingTable?.querySelectorAll(\n            '[data-pricing-table-with-wizard-package-header]'\n        );\n        const currency = selectedLocationData?.currency;\n        const paymentFrequency = selectedLocationData?.payment_frequency;\n\n        tableHeaders?.forEach(tableHeader => {\n            // elements to modify\n            const headerName = `${tableHeader.dataset.pricingPlanSlug}_pricing`;\n\n            const headerPriceHTMLElement = tableHeader.querySelector(\n                '[data-pricing-display-numbers]'\n            );\n            const headerCurrencyAndFrequencyHTMLElement = tableHeader.querySelector(\n                '[data-pricing-table-with-wizard-price-currency-frequency]'\n            );\n            const basePriceEl = tableHeader.querySelector('[data-pricing-base-price]');\n            const locationPriceEl = tableHeader.querySelector(\n                '[data-pricing-total-location-price]'\n            );\n            const registerPriceEl = tableHeader.querySelector(\n                '[data-pricing-total-register-price]'\n            );\n\n            const priceBreakdownEls = tableHeader.querySelectorAll(\n                '[data-pricing-price-breakdown]'\n            );\n\n            if (\n                tabSelectedPeriod &&\n                headerName &&\n                headerPriceHTMLElement &&\n                paymentsToggleState &&\n                headerCurrencyAndFrequencyHTMLElement\n            ) {\n                const numberOfLocations =\n                    Number(\n                        document.querySelector('[data-filtering-number-locations]')?.value\n                    ) || 1;\n                const locationsPrice =\n                    Number(\n                        selectedLocationData['additional_price_details'][headerName][\n                            `additional_location_${tabSelectedPeriod}`\n                        ]\n                    ) || 0;\n                const numberOfRegisters =\n                    Number(\n                        document.querySelector('[data-filtering-number-registers]')?.value\n                    ) || 1;\n                const registersPrice =\n                    Number(\n                        selectedLocationData['additional_price_details'][headerName][\n                            'additional_register'\n                        ]\n                    ) || 0;\n                const basePrice =\n                    Number(\n                        selectedLocationData[paymentsToggleState][headerName][\n                            tabSelectedPeriod.trim()\n                        ]\n                    ) || 0;\n                const totalRegisterPrice =\n                    (numberOfRegisters - numberOfLocations) * registersPrice;\n                const totalLocationPrice = (numberOfLocations - 1) * locationsPrice;\n                const headerPrice = basePrice + totalLocationPrice + totalRegisterPrice;\n                if (basePriceEl) basePriceEl.innerHTML = `${basePrice} ${currency}`;\n                if (locationPriceEl)\n                    locationPriceEl.innerHTML = `${totalLocationPrice} ${currency}`;\n                if (registerPriceEl)\n                    registerPriceEl.innerHTML = `${totalRegisterPrice} ${currency}`;\n\n                priceBreakdownEls.forEach(priceBreakdownEl => {\n                    priceBreakdownEl.hidden = !(\n                        numberOfRegisters > 1 || numberOfLocations > 1\n                    );\n                });\n\n                const currencyAndFrequency =\n                    currency &&\n                    paymentFrequency &&\n                    `${currency} <br> /${paymentFrequency.toLowerCase()}`;\n\n                headerPrice && (headerPriceHTMLElement.innerHTML = headerPrice);\n                currencyAndFrequency &&\n                    (headerCurrencyAndFrequencyHTMLElement.innerHTML =\n                        currencyAndFrequency);\n            }\n        });\n    };\n\n    const updateIntegratedPaymentsCheckmarks = (\n        selectedLocationData,\n        paymentsToggleState\n    ) => {\n        const integratedPaymentsRow = desktopTable?.querySelector(\n            '[data-is-related-to-integrated-payments]'\n        );\n        const integratedPaymentCheckmarks = integratedPaymentsRow?.querySelectorAll(\n            '[data-pricing-table-checkmarks]'\n        );\n        const cellState = setCellState(\n            integratedPaymentsRow,\n            integratedPaymentCheckmarks\n        );\n        cellStateSwitch(selectedLocationData, paymentsToggleState, cellState);\n        const integratedPaymentsRows = pricingTable?.querySelectorAll(\n            '[data-is-related-to-integrated-payments]'\n        );\n        integratedPaymentsRows?.forEach(row => {\n            const integratedPaymentCell = row?.querySelector(\n                '[data-pricing-payments=\"true\"]'\n            );\n            if (\n                integratedPaymentCell &&\n                integratedPaymentCell.dataset.pricingPlanSlug !== 'enterprise'\n            ) {\n                const cellState = setCellState(\n                    row,\n                    integratedPaymentCell,\n                    integratedPaymentCell.innerText\n                );\n                cellStateSwitch(selectedLocationData, paymentsToggleState, cellState);\n            }\n        });\n    };\n\n    const updatePaymentsCardRateRow = (selectedLocationData, paymentsToggleState) => {\n        // Actions for Desktop:\n        // isHidden here means that the value has been deleted from the lexic field in order to hide the row.\n        const isHidden =\n            Boolean(selectedLocationData.lightspeed_payments_card_rate) === false;\n        const rate = selectedLocationData?.lightspeed_payments_card_rate;\n        const lightspeedPaymentsCardRateRow = desktopTable?.querySelector(\n            '[data-is-related-to-ls-payments-card-rate]'\n        );\n        const lightspeedPaymentsCardRateCells =\n            lightspeedPaymentsCardRateRow?.querySelectorAll(\n                '[data-pricing-table-with-table-lightspeed-payments-card-rate-cell]'\n            );\n\n        const cellState = setCellState(\n            lightspeedPaymentsCardRateRow,\n            lightspeedPaymentsCardRateCells,\n            rate,\n            isHidden\n        );\n\n        cellStateSwitch(selectedLocationData, paymentsToggleState, cellState);\n\n        // Actions for Mobile:\n        const lightspeedPaymentsCardRateRows = pricingTable?.querySelectorAll(\n            '[data-is-related-to-ls-payments-card-rate]'\n        );\n        lightspeedPaymentsCardRateRows?.forEach(row => {\n            const lightspeedPaymentsCardRateCell = row?.querySelector(\n                '[data-pricing-payments=\"true\"]'\n            );\n            if (\n                lightspeedPaymentsCardRateCell &&\n                lightspeedPaymentsCardRateCell.dataset.pricingPlanSlug !== 'enterprise'\n            ) {\n                const cellState = setCellState(\n                    row,\n                    lightspeedPaymentsCardRateCell,\n                    lightspeedPaymentsCardRateCell.innerHTML,\n                    isHidden\n                );\n                cellStateSwitch(selectedLocationData, paymentsToggleState, cellState);\n\n                const parentheticalTextElement =\n                    lightspeedPaymentsCardRateCell.querySelector(\n                        '[data-parenthetical-text]'\n                    );\n                if (parentheticalTextElement) parentheticalTextElement.innerText = rate;\n            }\n        });\n    };\n\n    const updateOnboardingCheckmarks = selectedLocationData => {\n        const onboardingRow = pricingTable?.querySelector(\n            '[data-is-related-to-onboarding]'\n        );\n        const onboardingCells = onboardingRow?.querySelectorAll(\n            '[data-pricing-table-with-table-lightspeed-payments-card-rate-cell]'\n        );\n\n        if (onboardingCells && selectedLocationData?.packages) {\n            onboardingCells.forEach(cell => {\n                for (const [planName, planData] of Object.entries(\n                    selectedLocationData.packages\n                )) {\n                    const { label } = planData.services.onboarding;\n                    if (label) {\n                        if (cell.dataset.pricingPlanSlug === planName) {\n                            cell.innerHTML = label;\n                        }\n                    }\n                }\n            });\n        }\n    };\n\n    const updateTable = (triggeredBy, event) => {\n        if (event) {\n            switch (triggeredBy) {\n                case 'toggle':\n                    updateToggleUIStateOnToggle();\n                    break;\n                case 'tab':\n                    updateActiveTab(event.target);\n                    break;\n                default:\n                    break;\n            }\n        }\n\n        const dropdownSelectedOption = locationSelector?.value;\n        const selectedLocationData = getLocationSelectorLocationData(\n            lexicData,\n            dropdownSelectedOption\n        );\n        const tabSelectedPeriod = getActiveTab();\n        if (selectedLocationData) {\n            const paymentsToggleState =\n                controlPaymentsToggleDisplayAndState(selectedLocationData);\n            updatePrices(selectedLocationData, paymentsToggleState, tabSelectedPeriod);\n            updateIntegratedPaymentsCheckmarks(selectedLocationData, paymentsToggleState);\n            updatePaymentsCardRateRow(selectedLocationData, paymentsToggleState);\n            updateOnboardingCheckmarks(selectedLocationData);\n        }\n    };\n\n    // ---------- INIT ----------\n    const init = () => {\n        const geoMonster = new GeoMonster();\n        const countryCode = geoMonster.getField('country_code') ?? 'Global';\n\n        populateLocationSelectorWithOptionsFromLexic(countryCode, lexicData);\n        updateTable('', '', countryCode);\n\n        locationSelector?.addEventListener('change', event => {\n            updateTable('select', event, countryCode);\n        });\n\n        toggleButton?.addEventListener('click', event => {\n            updateTable('toggle', event, countryCode);\n        });\n\n        tabs.forEach(button => {\n            button.addEventListener('click', event => {\n                updateTable('tab', event, countryCode);\n            });\n        });\n\n        numberInputs?.forEach(input => {\n            input.addEventListener('change', event => {\n                if (Number(input.value) > Number(input.max)) input.value = input.max;\n                if (Number(input.value) < Number(input.min)) input.value = input.min;\n                if (input.name === 'locations') {\n                    const registersInput = pricingTable?.querySelector(\n                        '[data-filtering-number-registers]'\n                    );\n                    registersInput.min = input.value;\n                    if (Number(registersInput.value) < Number(registersInput.min))\n                        registersInput.value = registersInput.min;\n                }\n                updateTable('numberInput', event, countryCode);\n            });\n        });\n\n        buildMobileSwipers(pricingTable);\n    };\n\n    return {\n        init,\n    };\n}\n\nexport { index as default };\n","import { FilteringDataInterface } from 'root/page/pricing/retailLocalizationPricing/pricingLocationTypes';\n\nconst toggleLocationSelectorDisplay = (\n    filterContainerElement: HTMLElement | null | undefined,\n    showFilter = false\n) => filterContainerElement?.classList.toggle('gb-hide', !showFilter);\n\nconst getLocationSelectorLocationData = (\n    data: FilteringDataInterface,\n    locationSelectorValue: string\n) => {\n    return (\n        locationSelectorValue &&\n        data?.filtering.filters.find(item => item.country_code === locationSelectorValue)\n    );\n};\n\nfunction getLocationSelector(el: HTMLElement | null | undefined) {\n    const filterContainerElement: HTMLElement | null | undefined = el?.querySelector(\n        '[data-filtering-region-form]'\n    );\n    const locationSelector: HTMLSelectElement | null | undefined =\n        filterContainerElement?.querySelector('[data-filtering-region-dropdown]');\n\n    const populateLocationSelectorWithOptionsFromLexic = (\n        cookieValue: string,\n        lexicData: FilteringDataInterface\n    ) => {\n        const filters = lexicData?.filtering.filters;\n        if (filters) {\n            const selectedOption =\n                filters.find(element => element.country_code === cookieValue)\n                    ?.country_code ?? 'Global';\n\n            filters.forEach(element => {\n                if (element.country_code) {\n                    const option = document.createElement('option');\n                    option.value = element.country_code;\n                    option.text = element.country_name;\n                    // selects the appropriate option\n                    if (selectedOption === element.country_code) {\n                        option.setAttribute('selected', 'true');\n                    }\n                    locationSelector?.appendChild(option);\n                }\n            });\n            toggleLocationSelectorDisplay(filterContainerElement, filters?.length > 0);\n        }\n    };\n\n    return {\n        locationSelector,\n        getLocationSelectorLocationData,\n        populateLocationSelectorWithOptionsFromLexic,\n    };\n}\n\nexport { getLocationSelector };\n","enum PaymentsEnums {\n    with = 'pricing_with_payments',\n    without = 'pricing_without_payments',\n}\n\nenum PaymentsOptionsStateEnum {\n    default = 'default',\n    optional = 'optional',\n    notAvail = 'not_available',\n    notSet = 'not_set',\n}\n\ninterface PaymentsFrequencyInterface {\n    annually: string;\n    monthly: string;\n}\n\ninterface PricingPlansInterface {\n    lean_pricing: PaymentsFrequencyInterface;\n    standard_pricing: PaymentsFrequencyInterface;\n    advanced_pricing: PaymentsFrequencyInterface;\n}\n\ninterface SelectedLocationDataInterface {\n    currency: string;\n    payment_frequency: string;\n    country_code: string;\n    country_name: string;\n    payments_option: string;\n    pricing_with_payments: PricingPlansInterface;\n    pricing_without_payments: PricingPlansInterface;\n    lightspeed_payments_card_rate: string;\n}\n\ninterface FilteringDataInterface {\n    filtering: {\n        filters: [SelectedLocationDataInterface];\n    };\n}\n\nexport {\n    PaymentsEnums,\n    PaymentsOptionsStateEnum,\n    FilteringDataInterface,\n    SelectedLocationDataInterface,\n};\n","export default function pricingTableTabs(pricingTable: HTMLElement | null | undefined) {\n    const tabs = document.querySelectorAll(\n        '[data-pricing-table-with-wizard-tabs-container] [data-pricing-table-with-wizard-tab-button]'\n    );\n\n    const getActiveTab = () => {\n        if (pricingTable) {\n            const activeBillingPeriodTab: HTMLElement | null = pricingTable.querySelector(\n                '[data-pricing-table-with-wizard-tab-button][data-tab-active=true]'\n            );\n            return activeBillingPeriodTab?.dataset.tab?.replace('yearly', 'annually');\n        }\n    };\n\n    const updateActiveTab = (eventTarget: HTMLElement | undefined) => {\n        if (eventTarget) {\n            const isEventTargetCurrentlyActive = eventTarget.dataset.tabActive === 'true';\n            const activeTab = document.querySelector(\n                '[data-pricing-table-with-wizard-tab-button][data-tab-active=true]'\n            );\n\n            if (activeTab && !isEventTargetCurrentlyActive) {\n                activeTab.removeAttribute('data-tab-active');\n                activeTab.setAttribute('aria-selected', 'false');\n                eventTarget.setAttribute('data-tab-active', 'true');\n                eventTarget.setAttribute('aria-selected', 'true');\n            }\n        }\n    };\n\n    return { tabs, getActiveTab, updateActiveTab };\n}\n","import content from 'root/page/pricing/retailLocalizationPricing/wizardPricing/wizardPricing.json';\nimport { CookieMonster } from 'root/utils/cookies/cookieMonster';\nimport names from 'root/global_configs/names.json';\nimport { sendWizardPricingEventToGTM } from 'root/page/pricing/retailLocalizationPricing/wizardPricing/wizardPricingGTM';\nimport { getLocationSelector } from 'root/page/pricing/retailLocalizationPricing/pricingLocationSelector';\nimport {\n    FilteringDataInterface,\n    PaymentsEnums,\n} from 'root/page/pricing/retailLocalizationPricing/pricingLocationTypes';\n\nconst fieldChoicesKeys = ['annual_gtv', 'sales_channels', 'analytics_needs'] as const;\ntype FieldChoicesKeys = typeof fieldChoicesKeys[number];\ntype FieldChoices = Record<FieldChoicesKeys, string>;\n\nclass Index {\n    #wizardPricingContainer: HTMLElement;\n    #fieldButtonsToStore: HTMLButtonElement[];\n    #nextButtons: HTMLButtonElement[];\n    #fieldChoices: FieldChoices;\n    #lexicData: FilteringDataInterface;\n    #locationSelector: HTMLSelectElement | null | undefined;\n    #getLocationSelectorLocationData;\n\n    constructor(el: HTMLElement, lexicData: FilteringDataInterface) {\n        this.#wizardPricingContainer = el;\n        this.#lexicData = lexicData;\n        this.#fieldButtonsToStore = Array.from(\n            this.#wizardPricingContainer.querySelectorAll(\n                '[data-wizard-pricing-store-field]'\n            )\n        );\n        this.#nextButtons = Array.from(\n            this.#wizardPricingContainer.querySelectorAll('[data-wizard-next-button]')\n        );\n        this.#fieldChoices = {\n            annual_gtv: '',\n            sales_channels: '',\n            analytics_needs: '',\n        };\n        const pricingTable = document.querySelector(\n            '[data-pricing-table-wizard=container]'\n        ) as HTMLElement | undefined;\n        ({\n            locationSelector: this.#locationSelector,\n            getLocationSelectorLocationData: this.#getLocationSelectorLocationData,\n        } = getLocationSelector(pricingTable));\n    }\n\n    updatePricesBasedOnLocationSelection() {\n        const planPanels = this.#wizardPricingContainer.querySelectorAll(\n            '[data-wizard-pricing-plan]'\n        );\n\n        const selectedLocationData =\n            this.#lexicData &&\n            this.#locationSelector &&\n            this.#getLocationSelectorLocationData(\n                this.#lexicData,\n                this.#locationSelector?.value\n            );\n\n        planPanels.forEach((panel: HTMLElement) => {\n            const planName =\n                panel.dataset.wizardPricingPlan !== 'enterprise' &&\n                (panel.dataset.wizardPricingPlan as 'lean' | 'standard' | 'advanced');\n\n            if (planName) {\n                const currencyAndFrequencyEl = panel.querySelector(\n                    '[data-pricing-wizard-price-currency-frequency]'\n                );\n                const priceEl = panel.querySelector('[data-pricing-display-numbers]');\n\n                const currency =\n                    typeof selectedLocationData !== 'string' &&\n                    selectedLocationData?.currency;\n                const frequency =\n                    typeof selectedLocationData !== 'string' &&\n                    selectedLocationData?.payment_frequency;\n\n                /*\n                pricing_with_payments and annually is hardcoded here,\n                because that's the case in\n                html/wp-content/themes/ls/views/Pages/wizard_pricing/include/result_content.html.twig\n\n                In case the pricing_with_payments is empty, we'll get the pricing_without_payments instead\n                */\n                const getLocalizedAnnualPrice = (\n                    paymentsSpec: PaymentsEnums = PaymentsEnums.with\n                ) =>\n                    typeof selectedLocationData !== 'string' &&\n                    selectedLocationData &&\n                    selectedLocationData[paymentsSpec][`${planName}_pricing`]['annually'];\n\n                const localizedAnnualPrice = getLocalizedAnnualPrice()\n                    ? getLocalizedAnnualPrice()\n                    : getLocalizedAnnualPrice(PaymentsEnums.without);\n\n                localizedAnnualPrice &&\n                    priceEl &&\n                    (priceEl.innerHTML = localizedAnnualPrice);\n                currencyAndFrequencyEl &&\n                    currency &&\n                    frequency &&\n                    (currencyAndFrequencyEl.innerHTML = `${currency} <br> /${frequency?.toLowerCase()}`);\n            }\n        });\n    }\n\n    #saveSelectionInVar(fieldName: FieldChoicesKeys, value: string) {\n        this.#fieldChoices[fieldName] = value;\n    }\n\n    #getPlanNameBasedOnSelection(selectedOptions: string[]) {\n        let planName = '';\n        content.pricingPlans.forEach(plan => {\n            for (const combo of plan.combinations) {\n                if (combo.every(option => selectedOptions.includes(option))) {\n                    planName = plan.name;\n                    break;\n                }\n            }\n        });\n\n        return planName;\n    }\n\n    #hideAllPlans() {\n        const planEls = this.#wizardPricingContainer.querySelectorAll(\n            '[data-wizard-pricing-plan]'\n        );\n        planEls.forEach(planEl => planEl.classList.add('gb-hide'));\n    }\n\n    #showPlanBasedOnName(planName: string) {\n        if (planName) {\n            const planEl = this.#wizardPricingContainer.querySelector(\n                `[data-wizard-pricing-plan=${planName}]`\n            );\n            if (planEl) planEl.classList.remove('gb-hide');\n            this.#setPricingPlanCookie(planName);\n        }\n    }\n    #setPricingPlanCookie(planName: string) {\n        (<any>window).registerCookieComplianceCallback({\n            callback: () => {\n                const cm = new CookieMonster();\n                cm.setCookie(names.cookies.pricingPlan, planName);\n            },\n            category: 'functional',\n            isCallOptanonWrapper: true,\n        });\n    }\n    #resolveResultPanelContent() {\n        let planName = '';\n        const resultPanel: HTMLElement | null =\n            this.#wizardPricingContainer.querySelector('[data-wizard-panel-type=result]');\n        if (resultPanel) {\n            const selectedOptions: string[] = Object.values(this.#fieldChoices);\n            planName = this.#getPlanNameBasedOnSelection(selectedOptions);\n            this.#hideAllPlans();\n            this.#showPlanBasedOnName(planName);\n            const wizardParent: HTMLElement | null = resultPanel.closest('[data-wizard]');\n            const stepToShow: HTMLElement | null | undefined =\n                wizardParent?.querySelector('[data-wizard-show-panel=true]');\n            if (wizardParent && stepToShow?.dataset.wizardPanelType === 'result')\n                wizardParent.style.height = `${resultPanel.offsetHeight}px`;\n        }\n    }\n\n    #wizardObserver = new IntersectionObserver(\n        (entries, observer) => {\n            entries.forEach(entry => {\n                if (entry.isIntersecting) {\n                    const wizardImages = document.querySelectorAll(\n                        '[data-wizard-pricing=image]'\n                    );\n                    Array.from(wizardImages).forEach(image => {\n                        image.classList.add('js-pricing-wizard-animate-image');\n                    });\n                    observer.unobserve(entry.target);\n                }\n            });\n        },\n        { threshold: 0.5 }\n    );\n\n    addButtonListeners() {\n        this.#fieldButtonsToStore.forEach(button => {\n            button.addEventListener('click', e => {\n                const fieldNameAndValue = (e.currentTarget as HTMLButtonElement).dataset\n                    .wizardPricingStoreField;\n                const [key, value] = fieldNameAndValue\n                    ? fieldNameAndValue.split('|')\n                    : '';\n                if (fieldChoicesKeys.includes(key as FieldChoicesKeys) && value) {\n                    this.#saveSelectionInVar(key as FieldChoicesKeys, value);\n                    this.#resolveResultPanelContent();\n                    sendWizardPricingEventToGTM(key);\n                }\n            });\n        });\n\n        /* If a user goes back and changes their choices, then clicks on the next button,\n        we need to make sure to update the result panel */\n        this.#nextButtons.forEach(nextButton => {\n            nextButton.addEventListener('click', () => {\n                this.#resolveResultPanelContent();\n            });\n        });\n    }\n\n    animateImages(wizardPricing: HTMLElement) {\n        this.#wizardObserver.observe(wizardPricing);\n    }\n\n    updatePricesBasedOnLocationSelectorChange() {\n        this.#locationSelector?.addEventListener('change', () => {\n            this.updatePricesBasedOnLocationSelection();\n        });\n    }\n}\n\nexport default function wizardPricing(lexicData: FilteringDataInterface) {\n    const wizardPricingEls = document.querySelectorAll('[data-wizard-pricing=\"\"]');\n    wizardPricingEls.forEach((wizardPricing: HTMLElement) => {\n        const wizardP = new Index(wizardPricing, lexicData);\n        wizardP.addButtonListeners();\n        wizardP.animateImages(wizardPricing);\n        wizardP.updatePricesBasedOnLocationSelection();\n        wizardP.updatePricesBasedOnLocationSelectorChange();\n    });\n}\n","import { gtm } from 'root/utils/tracking/googleTagManagerDeprecated';\n\nconst sendWizardPricingEventToGTM = (formStage: string) => {\n    /* Temporary fix because this file has been imported from a legacy JS file and will shortly be replaced by the typed GA4 function */\n    (gtm as Record<string, (a: string) => Record<string, (a: string) => void>>)\n        .wizardPricing(formStage)\n        .sendEvent('pricing-wizard-module');\n};\n\nexport { sendWizardPricingEventToGTM };\n","const getParamValueFromUrl = function (\n    targetParamKey,\n    paramsString = window.location.search.substring(1)\n) {\n    if (\n        !targetParamKey ||\n        !paramsString ||\n        !paramsString.includes('=') ||\n        typeof paramsString !== 'string' ||\n        typeof targetParamKey !== 'string'\n    )\n        return '';\n    const paramsArray = paramsString.split('&');\n    if (paramsArray.length === 0) return '';\n    const paramResults = paramsArray\n        .map(val => val.split('='))\n        .filter(key => key[0] === targetParamKey);\n    return paramResults.length > 0 ? paramResults[0][1] : '';\n};\nconst paramsToObject = function (paramsString = window.location.search.substring(1)) {\n    const jsonObject = `{\"${paramsString.replace(/&/g, '\",\"').replace(/=/g, '\":\"')}\"}`;\n\n    return paramsString\n        ? JSON.parse(jsonObject, (key, value) =>\n              key === '' ? value : decodeURIComponent(value)\n          )\n        : {};\n};\nconst createParams = source => {\n    if (\n        typeof source === 'string' ||\n        (Object.constructor === Object && Object.entries(source).length === 0) ||\n        (Array.isArray(source) && source.length === 0)\n    )\n        return '';\n    const array = [];\n    for (let key in source) {\n        array.push(`${encodeURIComponent(key)}=${encodeURIComponent(source[key])}`);\n    }\n    return array.join('&');\n};\n\nexport { getParamValueFromUrl, paramsToObject, createParams };\n","/*\nXXX_JSREFACTOR_XXX\ntodo @JSREFACTOR\n    - create mock tests for cookies unit tests\n*/\nimport { isJson } from 'root/utils/json/isJson';\nconst CookieMonster = function () {\n    this.setCookie = function (name, value, days) {\n        let expires = '';\n        if (days) {\n            let date = new Date();\n            date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n            expires = `; expires=${date.toUTCString()}`;\n        }\n        document.cookie = `${name}=${value} ${expires}; path=/`;\n    };\n    this.getRawCookie = function (name) {\n        const nameEQ = `${name}=`;\n        const ca = document.cookie.split(';');\n        for (let i = 0; i < ca.length; i++) {\n            let c = ca[i];\n            while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n            if (c.includes(nameEQ)) {\n                return decodeURIComponent(c.substring(nameEQ.length, c.length));\n            }\n        }\n        return null;\n    };\n    this.getCookie = function (name) {\n        const rc = this.getRawCookie(name);\n        if (rc === null) return null;\n        return isJson.check(rc) ? JSON.parse(rc) : rc;\n    };\n    this.unsetCookie = function (name) {\n        this.setCookie(name, '', -1);\n    };\n};\n\nexport { CookieMonster };\n","/**\n *  GeoMonster makes use of CookieMonster's\n *  getCookie() function, but specifically\n *  pre-populates the geo data with empty\n *  strings so we don't run into an error\n *  when cookies are disabled.\n */\nimport { CookieMonster } from 'root/utils/cookies/cookieMonster';\nexport class GeoMonster extends CookieMonster {\n    constructor() {\n        super();\n\n        let geoFields = {\n            country: '',\n            country_code: '',\n            city: '',\n            state: '',\n            state_code: '',\n            continent: '',\n            longitude: '',\n            latitude: '',\n        };\n        const c = this.getCookie('geoConfigDebug')\n            ? this.getCookie('geoConfigDebug')\n            : this.getCookie('geoConfig');\n        // The right side of && doesn't evaluate if left\n        // side is false. If c is not defined, then left\n        // side is false, so the && is false, and the\n        // inner block should not run.\n        if (typeof c !== 'undefined' && c !== null) {\n            for (let field in c) {\n                if (c[field] !== null) {\n                    geoFields[field] = c[field];\n                }\n            }\n        }\n\n        this.getField = function (field) {\n            return geoFields[field];\n        };\n    }\n}\n","import { encodeString, decodeString } from 'root/utils/string/encoding';\n\nconst includedFields = [\n    'company',\n    'full_name',\n    'phone',\n    'email',\n    'role',\n    'business_type',\n    'time_to_purchase',\n    'existing_business',\n    'feature_interest',\n    'inventory_volume',\n    'resto_business_type',\n    'general_opt_in',\n    'existing_business',\n    'user_set_country_code',\n    'gtv',\n    'zip',\n    'postal_code',\n];\nconst leadformPrefix = 'leadform';\n\n// Returns true if the form field name is part of the the `includedFields`\nconst isIncludedField = (elName: string) => {\n    if (elName) {\n        return includedFields.includes(elName);\n    }\n\n    return false;\n};\n\n// Returns true if the form name is part of the `excludedForms` array\nconst isFormExcludedFromLocalStorage = (form: HTMLElement) => {\n    if (form && form.dataset.formName) {\n        const excludedForms = [\n            'other_reseller',\n            'other_email_preference_center',\n            'other_partner_application',\n        ];\n\n        return excludedForms.includes(form.dataset.formName);\n    }\n\n    return false;\n};\n\n/*\n * Checks if the current element is a select tag,\n * if yes, it returns true when the current selected option has the `data-adp` attribute\n * */\nconst isADPBusinessType = (el: HTMLElement | HTMLScriptElement) => {\n    return el instanceof HTMLSelectElement\n        ? el.options[el.selectedIndex].hasAttribute('data-adp')\n        : false;\n};\n\n// Returns true if field has a value and is a phone field or not hidden\nconst isValidFormEl = (el: HTMLInputElement | HTMLSelectElement, elName: string) => {\n    return el.value !== '' && (elName === 'phone' || el.type !== 'hidden');\n};\n\n// Saves valid form field values to the local storage\nfunction storeEncodedFormFieldValue(\n    el: HTMLInputElement | HTMLSelectElement,\n    elName: string\n) {\n    if (isIncludedField(elName) && !isADPBusinessType(el) && isValidFormEl(el, elName)) {\n        saveEncodedValueToLocalStorage(elName, el.value);\n    }\n}\n\n// Saves encoded value to localStorage\nfunction saveEncodedValueToLocalStorage(\n    key: string,\n    value: string,\n    prefix: string = leadformPrefix\n) {\n    (<any>window).registerCookieComplianceCallback({\n        callback: () =>\n            window.localStorage.setItem(`${prefix}.${key}`, encodeString(value)),\n        category: 'functional',\n        isCallOptanonWrapper: true,\n    });\n}\n\n// Returns true if the data-form-autofill attribute is set to \"enabled\"\nfunction isEnabledFormAutofill() {\n    return document.body.dataset.formAutofill === 'enabled';\n}\n\nfunction removeKeyFromLocalStorage(key: string, prefix: string = leadformPrefix) {\n    window.localStorage.removeItem(`${prefix}.${key}`);\n}\n\n// Deletes local storage when the isEnabledFormAutofill() is set to false\nfunction clearLocalStorageBasedOnBodyAttr(prefix: string = leadformPrefix) {\n    if (!isEnabledFormAutofill()) {\n        includedFields.forEach(includedField => {\n            window.localStorage.removeItem(`${prefix}.${includedField}`);\n        });\n        window.localStorage.removeItem('ls.barcode.email');\n    }\n}\n\n// Removes key:value pair from localStorage\nfunction removeFormFieldValue(key: string) {\n    if (navigator.cookieEnabled) {\n        window.localStorage.removeItem(`${leadformPrefix}.${key}`);\n    }\n}\n\n// Gets decoded local storage item\nfunction getDecodedFormFieldValue(fieldName: string) {\n    return isIncludedField(fieldName) ? getDecodedValueFromLocalStorage(fieldName) : null;\n}\n\n// Gets value from localStorage and decodes it\nfunction getDecodedValueFromLocalStorage(key: string, prefix: string = leadformPrefix) {\n    const localStorageValue =\n        window && navigator.cookieEnabled\n            ? window.localStorage.getItem(`${prefix}.${key}`)\n            : null;\n    return localStorageValue ? decodeString(localStorageValue) : null;\n}\n\nexport {\n    storeEncodedFormFieldValue,\n    getDecodedFormFieldValue,\n    removeFormFieldValue,\n    isFormExcludedFromLocalStorage,\n    clearLocalStorageBasedOnBodyAttr,\n    isEnabledFormAutofill,\n    getDecodedValueFromLocalStorage,\n    saveEncodedValueToLocalStorage,\n    removeKeyFromLocalStorage,\n};\n","import { getFieldName } from 'root/utils/forms/getFieldData';\n\n/*\n* This function is used to customize the field tracking data we send to GA. If a user interacts with a form\n* and completes a field, in most cases we send the data with this format: field_name|completed\n* However, when a user completes one of the fields listed in the exclusion array,\n* we send data in this format: field_name|field_value\n- If the current field value is empty, it returns the string \"empty\"\n- If the current field is NOT in the fieldExclusionArray, it returns the string \"completed\"\n- If the current field IS in the fieldExclusionArray, it returns the current field's value\n* */\nconst getTrackingValue = (\n    element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n) => {\n    if (element instanceof HTMLSelectElement) {\n        return element?.options[element?.selectedIndex]?.dataset.tracking;\n    } else {\n        return element.dataset.wizardTracking ?? null;\n    }\n};\nconst getAnonymizedFieldValue = (\n    element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n    formIsWizard = false\n) => {\n    let fieldName: string | undefined, fieldValue: string | undefined;\n    const trackingValue = getTrackingValue(element);\n    const fieldExclusionArray = [\n        'product',\n        'role',\n        'business_type',\n        'agnostic_business_type',\n        'existing_business',\n        'ecommerce_choice',\n        'estimated_annual_gtv',\n        'gtv',\n    ];\n\n    if (element) {\n        if (formIsWizard) {\n            /*\n             * The wizard form field data gets stored in a data attribute with a \"\\\" to separate the name and value\n             * */\n            [fieldName, fieldValue] =\n                element.dataset.wizardFormStoreField?.split('|') ?? [];\n        } else {\n            /*\n             * For non-wizard forms, we get the input name and value from a form input field\n             * */\n            fieldName = getFieldName(element);\n            fieldValue = trackingValue ?? element.value;\n        }\n\n        if (fieldName && fieldValue) {\n            return fieldExclusionArray.includes(fieldName) ? fieldValue : 'completed';\n        }\n    }\n\n    return 'empty';\n};\n\nexport { getAnonymizedFieldValue };\n","const getFieldName = (\n    field: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n) => {\n    const formFieldDataAttribute = field.dataset.formFieldName ?? '';\n    const newField = {\n        ...field,\n        name: field.name === 'estimated_annual_gtv' ? 'gtv' : field.name,\n    };\n    return newField.name ?? formFieldDataAttribute;\n};\n\nexport { getFieldName };\n","/**\n * This utility function can be used to retrieve the value of a css property that belongs to a certain element.\n * The default element is the document.documentElement, where if we passed a certain css variable that was defined under the :root its value will be retrieved\n * usage example:\n * getElementStyleProperty('--global-css-var') // if css var was defined under root we will get its value.\n * or we can pass the element so we can get the css properties and variables that are scoped under this element:\n * getElementStyleProperty('--el-css-var', el)\n * @returns {string}\n */\nconst getElementStyleProperty = (property, el = document.documentElement) => {\n    return getComputedStyle(el).getPropertyValue(property);\n};\n\nexport default getElementStyleProperty;\n","let isJson = {\n    check(str) {\n        try {\n            JSON.parse(str);\n        } catch (e) {\n            return false;\n        }\n        return true;\n    },\n};\nexport { isJson };\n","const getLocale = function getLocation() {\n    return document.body.dataset.domain;\n};\n\nexport default getLocale;\n","// Base64 encode value\nfunction encodeString(string: string) {\n    return window.btoa(string);\n}\n\n// Decode base64 encodedValue\nfunction decodeString(encodedString: string) {\n    return window.atob(encodedString);\n}\n\nexport { encodeString, decodeString };\n","import { getFormattedTrackingString } from 'root/utils/tracking/BTFNavTracking/getFormattedTrackingString';\n\n/**\n * Locate the clicked item based on the nav 3 levels (parent, child, grand child)\n * and concatenate the different levels into a single string.\n * example: parent, parent>child, parent>child>grand_child\n * @param clickedLink\n * @returns {string}\n */\nconst getClickedElAncestorsText = clickedLink => {\n    let { parent, child, grandChild } = {\n        parent: clickedLink.closest('[data-navigation-level=parent]'),\n        child: clickedLink.closest('[data-navigation-level=child]'),\n        grandChild: clickedLink.closest('[data-navigation-level=grandchild]'),\n    };\n\n    const stringsArray = [];\n    const clickedLinkParentEl = clickedLink.parentElement; // We are comparing against the parent of the clicked item because we are checking the parent of each of the different nav levels.\n    const isParent = parent && clickedLinkParentEl === parent;\n    const isChild = child && clickedLinkParentEl === child;\n    const isGrandChild = grandChild && clickedLinkParentEl === grandChild;\n    const breadcrumbParent = parent.previousElementSibling;\n\n    isParentBreadCrumb(breadcrumbParent) && (parent = breadcrumbParent);\n    isParent && checkAndPushToArray(stringsArray, [parent]);\n    isChild && checkAndPushToArray(stringsArray, [parent, child]);\n    isGrandChild && checkAndPushToArray(stringsArray, [parent, child, grandChild]);\n    // Removes duplicates from array and separate family with \">\"\n    return stringsArray.join('>');\n};\n\n/**\n * Check if an el is valid and push to the array\n * @param arr\n * @param args\n */\nconst checkAndPushToArray = (arr, [...args]) => {\n    args.forEach(\n        el => el && el.innerText && arr.push(getFormattedTrackingString(el.innerText))\n    );\n};\n\n/**\n *\n * @param breadcrumbParent\n * @returns {boolean}\n */\nconst isParentBreadCrumb = breadcrumbParent => {\n    if (breadcrumbParent) {\n        // Check if it is a breadcrumb and send the breadcrumb string along with the child el\n        return (\n            breadcrumbParent.dataset.navigationLevel === 'parent' &&\n            breadcrumbParent.classList.contains(\n                'navigation-btf-mobile__item--breadcrumb-first'\n            )\n        );\n    }\n    return false;\n};\n\nexport default getClickedElAncestorsText;\n","/**\n * performs the following operations to a passed string:\n * 1. in case of a nested list inside a list item, it gets the parent list string, and excludes the nested strings separated by line break.\n * 2. transform the string to lowercase\n * 3. spaces and dashes are replaced by underscores\n * 4. removes any spaces from beginning and end of string\n * @param str\n * @returns {string}\n */\nconst getFormattedTrackingString = str => {\n    if (str) {\n        return str.split('\\n')[0].toLowerCase().replace(/\\s|-/g, '_').trim();\n    }\n    return '';\n};\n\nexport { getFormattedTrackingString };\n","import productTrackingMapping from 'root/utils/tracking/GA4/productTrackingMapping.json';\nimport type {\n    GTMEvent,\n    incompleteGTMEvent,\n} from 'root/utils/tracking/GA4/googleTagManager';\nimport { getDecodedValueFromLocalStorage } from 'root/utils/dom/localStorage';\nimport { PlacementEnums } from 'root/utils/tracking/GA4/types';\n\ntype Field = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\ntype FormEventAction =\n    | 'form_submit'\n    | 'form_success'\n    | 'form_error'\n    | 'form_in_page'\n    | 'form_lightbox_open'\n    | 'form_lightbox_closed'\n    | 'form_email_opt_in'\n    | 'form_email_opt_out'\n    | 'field_completed'\n    | 'field_displayed';\nclass FormGTMObjectConstructor {\n    #form: HTMLFormElement;\n    #fields: Field[];\n    #incompleteFormGTMObject: incompleteGTMEvent;\n    #isGolfProduct: boolean;\n\n    constructor(form: HTMLFormElement) {\n        this.#form = form;\n        this.#fields = Array.from(form.elements).filter(element => {\n            return 'type' in element ? element.type !== 'button' : false;\n        }) as Field[];\n        this.#isGolfProduct = this.#getFieldValue('product')?.toLowerCase() === 'golf';\n        this.#incompleteFormGTMObject = {};\n    }\n    #getFieldValue(fieldName: string, isHidden = true) {\n        if (isHidden) {\n            return this.#fields.find(field => field.name === fieldName)?.value || null;\n        }\n        return (\n            this.#fields.find(\n                field => field.type !== 'hidden' && field.name === fieldName\n            )?.value || null\n        );\n    }\n\n    #getTrackingValue(\n        trackingKey: string,\n        eventAction: FormEventAction,\n        completedFieldValue?: string,\n        fieldName?: string\n    ) {\n        switch (trackingKey) {\n            case 'form_name': {\n                const fieldValue = this.#getFieldValue('form_name');\n                return this.#form.dataset.formTrackingName ?? fieldValue;\n            }\n            case 'product_type': {\n                /* This is used for non-wizard agnostic forms where the product can be chosen from the select field */\n                const productValueFromSelectField =\n                    this.#getFieldValue('product', false)?.toLowerCase() ?? null;\n\n                /* This is used for non-wizard product-related forms (Retail, or Resto, or Golf) */\n                const productValueFromHiddenInputField =\n                    this.#getFieldValue('product')?.toLowerCase() ?? null;\n\n                const productFieldValue =\n                    productValueFromSelectField || productValueFromHiddenInputField;\n\n                const mappingObject: Record<string, string> = productTrackingMapping;\n\n                let productValue;\n                if (productFieldValue) {\n                    productValue = mappingObject[productFieldValue] ?? productFieldValue;\n                }\n\n                const blogProductFieldValue = this.#getFieldValue('blog_product')\n                    ?.split('.')\n                    .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n                    .join(', ');\n\n                return productValue ?? blogProductFieldValue;\n            }\n            case 'stage':\n                return this.#getFieldValue('stage');\n            case 'role':\n                if (!['form_success', 'form_submit'].includes(eventAction)) {\n                    return null;\n                }\n\n                return this.#isGolfProduct && this.#getFieldValue('role');\n            case 'business_type':\n                if (\n                    this.#isGolfProduct ||\n                    !['form_success', 'form_submit'].includes(eventAction)\n                )\n                    return null;\n                return (\n                    this.#getFieldValue('resto_business_type') ??\n                    this.#getFieldValue('agnostic_business_type') ??\n                    this.#getFieldValue('business_type') ?? // business_type is for retail\n                    this.#getFieldValue('business_type_slug')\n                        ?.split('_')\n                        .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n                        .join(' ')\n                );\n            case 'gtv_value':\n                if (!['form_success', 'form_submit'].includes(eventAction)) {\n                    return null;\n                }\n                return this.#getFieldValue('estimated_annual_gtv');\n            case 'field_value':\n                return completedFieldValue;\n\n            case 'field_name':\n                return fieldName;\n            case 'internal_test': {\n                const emailValue = this.#getFieldValue('email') ?? '';\n                if (emailValue && eventAction === 'form_success') {\n                    return emailValue\n                        ?.split('@')[1]\n                        ?.match(/lightspeedhq\\.[a-z]{0,4}(\\.[a-z]{0,4})?/)\n                        ? '1'\n                        : '0';\n                }\n                break;\n            }\n            case 'placement':\n                return getFormPlacementFromDataAttribute(this.#form);\n        }\n    }\n    getFormGTMObject(\n        eventAction: FormEventAction,\n        completedFieldValue?: string,\n        fieldName?: string\n    ): GTMEvent {\n        const trackingKeys = [\n            'form_name',\n            'product_type',\n            'stage',\n            'role',\n            'business_type',\n            'gtv_value',\n            'field_value',\n            'field_name',\n            'internal_test',\n            'placement',\n        ];\n\n        // Here we loop through each trackingKey (E.g. 'business_type') that we want to populate and send to Google Analytics\n        for (const trackingKey of trackingKeys) {\n            const trackingValue = this.#getTrackingValue(\n                trackingKey,\n                eventAction,\n                completedFieldValue,\n                fieldName\n            );\n            if (trackingValue) {\n                this.#incompleteFormGTMObject[trackingKey] = trackingValue;\n            }\n        }\n\n        return Object.assign(\n            { event_action: eventAction },\n            this.#incompleteFormGTMObject\n        );\n    }\n}\n\nconst getPlacement = (element: HTMLElement) => {\n    if (element.closest('.footer-main')) {\n        return PlacementEnums.footer;\n    }\n    if (element.closest('.main-site-header-btf')) {\n        return PlacementEnums.nav;\n    }\n    if (element.closest('[data-hero-section]')) {\n        return PlacementEnums.hero;\n    }\n    return PlacementEnums.body;\n};\n\nconst getFormPlacementFromDataAttribute = (form: HTMLFormElement) => {\n    return form.dataset.formPlacement ?? getPlacement(form);\n};\n\nexport { FormGTMObjectConstructor, getPlacement, getFormPlacementFromDataAttribute };\n","// Review usage documentation in the README.md file in this directory\ndeclare global {\n    interface Window {\n        dataLayer: Record<string, unknown>;\n    }\n}\n\ntype incompleteGTMEvent = {\n    [key: string]: string | undefined;\n} & { event?: never };\n\ntype GTMEvent = incompleteGTMEvent & {\n    event_action: string;\n};\n\nclass GoogleTagManager {\n    #eventObject: incompleteGTMEvent;\n\n    constructor(event: incompleteGTMEvent) {\n        this.#eventObject = event;\n    }\n\n    static #sendToDataLayer(event: GTMEvent) {\n        if (\n            window.dataLayer &&\n            Array.isArray(window.dataLayer) &&\n            window.dataLayer.length > 0\n        ) {\n            window.dataLayer.push({ ...event, event: 'web_event' });\n        }\n    }\n\n    static sendEvent(event: GTMEvent) {\n        GoogleTagManager.#sendToDataLayer(event);\n    }\n\n    sendEvent(event: GTMEvent) {\n        GoogleTagManager.#sendToDataLayer({ ...this.#eventObject, ...event });\n    }\n}\n\nexport { GoogleTagManager };\nexport type { GTMEvent, incompleteGTMEvent };\n","enum PlacementEnums {\n    nav = 'Navigation',\n    hero = 'Hero',\n    footer = 'Footer',\n    body = 'Body',\n}\n\ntype PlacementType =\n    | PlacementEnums.nav\n    | PlacementEnums.hero\n    | PlacementEnums.footer\n    | PlacementEnums.body\n    | undefined;\n\nexport { PlacementEnums, PlacementType };\n","import { LoggingHandler } from 'root/utils/errorReporting/LoggingHandler';\nimport { getFormattedTrackingString } from 'root/utils/tracking/BTFNavTracking/getFormattedTrackingString';\nimport getClickedElAncestorsText from 'root/utils/tracking/BTFNavTracking/getClickedElAncestorsText';\n\nconst channelsCallbackGroup = () => {\n    const formCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            concatFormLabel\n        );\n    };\n\n    const fieldCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            concatFormLabel\n        );\n    };\n\n    const buttonCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            concatButtonLabel\n        );\n    };\n\n    const menuCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            getMainBTFNavEventLabelText\n        );\n    };\n    const secondaryMenuCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            getSecondaryBTFNavEventLabelText\n        );\n    };\n    const footerCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            getFooterNavEventLabelText\n        );\n    };\n\n    const regionAlertCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            ({ labelEl }) => labelEl\n        );\n    };\n\n    const businessTypeCookieSetCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            getFormattedBusinessTypeLabel\n        );\n    };\n\n    const cookieNotificationCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const expertsCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            ({ labelEl }) => labelEl\n        );\n    };\n\n    const alertBannerCallback = (eventCategory, configLabelArray) => {\n        return callableFunctionTemplate(\n            { eventCategory, configLabelArray },\n            truncateAlertBannerTitle\n        );\n    };\n\n    const sliderCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const pricingPaymentsToggleCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const wizardFormElementCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const wizardFormFieldCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const wizardPricingCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const btSelectionModuleCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const dynamicLandingPagesCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    const tabClickForPanelChangeCallback = (eventCategory, configLabelArray) => {\n        return (() => {\n            return callableFunctionTemplate(\n                { eventCategory, configLabelArray },\n                ({ labelEl }) => labelEl\n            );\n        })();\n    };\n\n    return {\n        formCallback,\n        fieldCallback,\n        buttonCallback,\n        menuCallback,\n        footerCallback,\n        secondaryMenuCallback,\n        regionAlertCallback,\n        businessTypeCookieSetCallback,\n        cookieNotificationCallback,\n        expertsCallback,\n        alertBannerCallback,\n        sliderCallback,\n        btSelectionModuleCallback,\n        pricingPaymentsToggleCallback,\n        wizardFormElementCallback,\n        wizardFormFieldCallback,\n        dynamicLandingPagesCallback,\n        wizardPricingCallback,\n        tabClickForPanelChangeCallback,\n    };\n};\n\nconst logErrorDetailsObj = {\n    tags: ['gtm-tracking'],\n    fileName: 'channelsCallbackGroup.js',\n    additionalData: {\n        location: window.location,\n    },\n};\n\nconst eventSendingObject = ({ eventCategory, eventLabel, eventValue = undefined }) => ({\n    sendEvent: eventAction => {\n        if (dataLayer) {\n            dataLayer.push({\n                event: 'GAEvent',\n                eventCategory,\n                eventAction,\n                eventLabel,\n                eventValue,\n                nonInteraction: true,\n            });\n        } else {\n            logErrorDetailsObj.searchTerm = 'missing-dataLayer';\n            LoggingHandler().logError('No dataLayer was found', logErrorDetailsObj);\n        }\n    },\n});\n\n// eg: gtm.callableFunction(form).sendEvent('event-action')\nconst callableFunctionTemplate = (\n    { eventCategory, configLabelArray = [] },\n    modifierFunction\n) => {\n    return labelEl => {\n        const eventLabel = modifierFunction({ labelEl, configLabelArray });\n        return eventSendingObject({ eventCategory, eventLabel });\n    };\n};\n\n// eg: gtm.silentFunction.sendEvent('event-action')\n/*\nconst silentFunctionTemplate = ({ eventCategory, eventLabel }) => {\n    return (() => {\n        return eventSendingObject({ eventCategory, eventLabel });\n    })();\n};\n*/\n\nconst getFormTrackingName = (formEl, field) => {\n    const formTrackingName = formEl.dataset.formTrackingName;\n    return formTrackingName ? formTrackingName : field.value;\n};\n\nconst verifyFormField = (formEl, labelName) => {\n    const fallbackObj = { value: 'empty' };\n    const field = formEl.querySelector('input[name=' + labelName + ']');\n    if (field && field.type === 'hidden' && field.value) {\n        return field.name === 'form_name'\n            ? getFormTrackingName(formEl, field)\n            : field.value;\n    }\n    return fallbackObj.value;\n};\n\nconst concatFormLabel = ({ labelEl, configLabelArray }) => {\n    try {\n        if (labelEl) {\n            return configLabelArray\n                .map(labelName => verifyFormField(labelEl, labelName))\n                .join('|');\n        } else {\n            logErrorDetailsObj.searchTerm = 'missing-form-label-element';\n            logErrorDetailsObj.tags.push('forms');\n            LoggingHandler().logError('Label element does not exist', logErrorDetailsObj);\n        }\n    } catch (e) {\n        logErrorDetailsObj.searchTerm = 'form-label-concatentation-error';\n        logErrorDetailsObj.tags.push('forms');\n        LoggingHandler().logError(e, logErrorDetailsObj);\n    }\n};\nconst concatButtonLabel = ({ labelEl, configLabelArray }) => {\n    try {\n        if (Object.entries(labelEl).length > 0) {\n            return configLabelArray\n                .map(a => labelEl[a])\n                .filter(item => item !== '')\n                .join('|');\n        } else {\n            logErrorDetailsObj.searchTerm = 'missing-button-element';\n            LoggingHandler().logError(\n                'Button element does not exist',\n                logErrorDetailsObj\n            );\n        }\n    } catch (e) {\n        logErrorDetailsObj.searchTerm = 'button-label-concatenation-error';\n        LoggingHandler().logError(e, logErrorDetailsObj);\n    }\n};\n\nconst getMainBTFNavEventLabelText = ({ labelEl }) => {\n    if (labelEl && labelEl.innerText) {\n        if (labelEl.closest('[data-navigation-group=main]')) {\n            if (labelEl.closest('[data-navigation-platform=desktop]'))\n                return getClickedElAncestorsText(labelEl);\n\n            if (labelEl.closest('[data-navigation-platform=mobile]'))\n                return getClickedElAncestorsText(labelEl);\n        }\n        return getFormattedTrackingString(labelEl.innerText);\n    }\n    return '';\n};\nconst getSecondaryBTFNavEventLabelText = ({ labelEl }) => {\n    if (labelEl && labelEl.innerText) {\n        if (labelEl.closest('[data-navigation-group=secondary]')) {\n            if (labelEl.closest('[data-navigation-platform=desktop]'))\n                return getClickedElAncestorsText(labelEl);\n\n            if (labelEl.closest('[data-navigation-platform=mobile]'))\n                return getClickedElAncestorsText(labelEl);\n        }\n        return getFormattedTrackingString(labelEl.innerText);\n    }\n    return '';\n};\nconst getFooterNavEventLabelText = ({ labelEl }) => {\n    if (labelEl && labelEl.innerText) {\n        if (labelEl.hasAttribute('data-navigation-level')) {\n            const navLevel = labelEl.getAttribute('data-navigation-level');\n            if (navLevel === 'parent') {\n                return getFormattedTrackingString(labelEl.innerText);\n            }\n            if (navLevel === 'child') {\n                const formattedChildText = getFormattedTrackingString(labelEl.innerText);\n\n                const columnGroupEl = labelEl.closest('[data-footer-nav-column]');\n                const parentEl = columnGroupEl\n                    ? columnGroupEl.querySelector('[data-navigation-level=parent]')\n                    : null;\n                const formattedParentText = parentEl\n                    ? getFormattedTrackingString(parentEl.innerText)\n                    : '';\n\n                return `${formattedParentText}>${formattedChildText}`;\n            }\n        }\n        if (labelEl.closest('[data-language-flag-list]')) {\n            return `region_code>${getFormattedTrackingString(labelEl.innerText)}`;\n        }\n        return getFormattedTrackingString(labelEl.innerText);\n    }\n    if (labelEl && labelEl.hasAttribute('data-footer-link-no-text')) {\n        const readableLabel = labelEl.getAttribute('data-footer-link-no-text');\n        return getFormattedTrackingString(readableLabel);\n    }\n\n    return '';\n};\n\nconst getFormattedBusinessTypeLabel = ({ labelEl }) => {\n    return labelEl.toLowerCase().replace(/\\s|-/g, '_').trim();\n};\n\nconst truncateAlertBannerTitle = ({ labelEl }) => {\n    return labelEl ? labelEl.innerText.substring(0, 40) : '';\n};\n\nexport { channelsCallbackGroup as default, concatFormLabel, eventSendingObject };\n","import trackingChannelsConfig from 'root/utils/tracking/tracking_channels_config';\nimport { LoggingHandler } from 'root/utils/errorReporting/LoggingHandler';\nimport channelsCallbackGroup from 'root/utils/tracking/channelsCallbackGroup';\n\n// @todo This is to be deleted after all instances have been replaced with the new function below\nconst GoogleTagManagerDeprecated = function (options = {}) {\n    this.options = options;\n};\nGoogleTagManagerDeprecated.prototype = {\n    sendEvent(eventName, eventCategory, eventAction, eventLabel, eventValue = undefined) {\n        if (typeof dataLayer !== 'undefined') {\n            dataLayer.push({\n                event: eventName,\n                eventCategory: eventCategory,\n                eventAction: eventAction,\n                eventLabel: eventLabel,\n                eventValue: eventValue,\n                nonInteraction: true,\n            });\n        }\n    },\n};\n\nconst logErrorDetailsObj = {\n    tags: ['gtm-tracking'],\n    fileName: 'googleTagManagerDeprecated.js',\n    additionalData: {\n        location: window.location,\n    },\n};\n\nconst gtm = (() => {\n    const channelsObjectConstructor = channelsCallbackGroupFunction => {\n        const reconstructedObject = {};\n        if (trackingChannelsConfig && typeof trackingChannelsConfig === 'object') {\n            for (let [key, value] of Object.entries(trackingChannelsConfig)) {\n                if (typeof channelsCallbackGroupFunction === 'function') {\n                    const { callbackName } = value;\n                    const callback = channelsCallbackGroupFunction()[callbackName];\n                    if (typeof callback === 'function') {\n                        reconstructedObject[key] = callback(\n                            value.eventCategory,\n                            value.eventLabel\n                        );\n                    } else {\n                        logErrorDetailsObj.searchTerm = 'channel-callback-error';\n                        LoggingHandler().logError(\n                            `This ${value.callback} does not exist in the js file.`,\n                            logErrorDetailsObj\n                        );\n                    }\n                }\n            }\n        } else {\n            logErrorDetailsObj.searchTerm = 'gtm-json-config-error';\n            logErrorDetailsObj.additionalData = {\n                trackingChannelsConfig,\n            };\n            LoggingHandler().logError(\n                'The tracking channels config does not exist or is the wrong type',\n                logErrorDetailsObj\n            );\n        }\n\n        return reconstructedObject;\n    };\n\n    return channelsObjectConstructor(channelsCallbackGroup);\n})();\n\nexport { GoogleTagManagerDeprecated, gtm };\n"],"names":["handleDomainPrefixField","_ref","form","errorClass","domainPrefixField","domain_prefix","domainPrefixFieldParent","parentElement","toggleDisplay","_form$form_type","_form$form_type$value","form_type","value","includes","dataset","fieldIsHidden","style","display","required","classList","contains","remove","removeOnSubmit","toggleSMSOptinAndFootnoteDisplayOnProductSelection","key","productValue","saveEncodedValueToLocalStorage","productFromLocalStorage","getDecodedValueFromLocalStorage","SMSoptin","querySelector","SMSOptinFootnote","toLowerCase","handleZipCodeField","selectedProduct","_cm$getCookie$country","_cm$getCookie","_cm$getCookie$country2","_cm$getCookie$state_c","_cm$getCookie2","_cm$getCookie2$state_","_form$dataset$formNam","cm","CookieMonster","isPostalCodeEnabled","document","body","postalCode","userCountryCode","getCookie","country_code","userStateCode","state_code","userIsInEnabledRegion","countryCode","stateCode","some","region","isAgnosticFormButWrongProduct","Boolean","formName","undefined","show","_form$querySelector","postalCodeField","closest","_postalCodeField$quer","_postalCodeField$quer2","postalCodeFieldObserver","codeField","IntersectionObserver","entries","intersectionObserver","forEach","entry","isIntersecting","getVisibility","field","window","getComputedStyle","visibility","handleVisibleCodeField","formGTMObjectConstructor","FormGTMObjectConstructor","GoogleTagManager","getFormGTMObject","unobserve","target","MutationObserver","mutationList","mutationObserver","disconnect","observe","childList","subtree","attributes","attributeFilter","root","threshold","createCodeFieldObserver","setAttribute","observing","add","removeAttribute","togglePostalCodeField","hideGolfFormOptionOnPCPages","location","pathname","formHideGolfPcPages","golfButton","Swiper","Navigation","A11y","FormUISlider","_FormUI","el","_this$firstPanelDiv","_this","_classCallCheck","slider","nextButtonEl","prevButtonEl","firstPanelDiv","secondPanelDiv","balanceTwoStepFormPanels","firstPanelInputs","Array","from","querySelectorAll","inputSelector","timelineContainer","_inherits","_createClass","fields","_fields","exceptionArray","filter","firstElementChild","name","_this$firstPanelDiv2","_this$secondPanelDiv","_this$firstPanelDiv3","_this$secondPanelDiv2","allFormFields","this","adjustedFormFieldsCount","length","adjustedMappedFormFieldsIndexModifier","assignedFormFields","map","index","step","firstStepMainFieldsWrapper","secondStepMainFieldsWrapper","appendChild","_this2","firstStepFields","getPanelFields","fieldsArrayWithExceptionsExcluded","every","_field$querySelector","type","checked","checkValidity","e","swiper","_secondStepFields$","secondStepFields","formValidationOnSubmit","isFirstSlideValid","slideNext","progressIndicator","syncProgressIndicatorToStep","focus","_firstStepFields$","slidePrev","slides","slide","panel","_this3","slidesPerView","centeredSlides","simulateTouch","spaceBetween","a11y","enabled","scrollOnFocus","on","init","addEventListener","advanceToNextSlide","code","shiftKey","reverseToPreviousSlide","makeInactiveSlidesInert","slideChangeTransitionEnd","inputs","prototype","slice","call","recaptchaContainer","loadCaptcha","hiddenFormClass","initFieldEvents","autofillBusinessTypeWithCookieValue","autofillFormsWithLocalStorageData","_initPhoneLib","initPhoneLib","_initPhoneLib2","_slicedToArray","phoneLibInstance","phoneField","destroy","LoggingHandler","logError","Error","searchTerm","tags","fileName","additionalData","url","href","raisePreFilledInputLabels","handleGooglePlacesFieldAutocomplete","setDataAttributeForAddress","setDataAttributeForZipCode","initSwiper","FormUI","currentStep","progressIndicatorEl","validClassName","validateFormStep","numberOfSlides","Number","progressIndicatorStepsTotal","progressIndicatorLastStep","concat","endForm","progressIndicatorFirstStep","isFormFieldsValid","formAllFieldsValid","validatePrepopulatedForm","validateFormOnCustomEvent","validateFormOnFirstStepValid","_validateFormStep","_validateFormStep2","_validateFormStep3","_step","_iterator","_createForOfIteratorHelper","s","n","done","progressIndicatorStepValid","err","f","validateAllEarlierSteps","progressIndicatorWidth","labelWidth","width","getElementStyleProperty","checkedCallback","uncheckedCallback","toggleEventHandler","ts","_ref2","toggleSwitchTextOff","toggleSwitchTextOn","currentTarget","gtm","sendEvent","toggleSwitchInput","ariaCheckedOn","_ref3","handleTextAppearanceForOffState","ariaCheckedOFF","toggleSwitches","toggleSwitch","toggleSwitchButton","toggleSwitchSelectors","bind","eventListener","tooltipOpener","tooltips","tooltipDisplayClass","closeTooltips","openTooltips","tooltip","openTooltip","tooltipButton","tooltipDialog","logUserAction","handleTooltipButtonClick","legacyPricing","featureTable","openFeatures","bodyRect","offset","pricingTableHandler","getParamValueFromUrl","history","scrollRestoration","getBoundingClientRect","top","scrollTo","tweenDisplay","pricingTable","els","status","opacityMap","opacity","setTimeout","toggleClassList","hiddenEls","visibleEls","paymentsEls","clearTimeout","toggleCallback","swiperWrapper","prevFirstSlide","getPaymentFrequencyToggleState","_pricingTable$querySe","capitalize","tab","showCorrectPricingDisplay","paymentToggleState","getPaymentToggleState","paymentFrequencyToggleState","toggleVisibilityOfCheckmarks","priceEl","priceMap","JSON","parse","pricingDisplayNumbers","innerHTML","pricingTableWithWizard","button","registerCookieComplianceCallback","pricingLabel","setCookie","names","OptanonWrapper","swiperThumbs","modules","Keyboard","direction","loop","autoScrollOffset","allowTouchMove","keyboard","onlyInViewport","Thumbs","thumbs","slideChange","previousSlide","propertyName","_swiperThumbs$$el","$el","slideIndex","pricingWizardSliderSlideIndex","slideTo","tabButtons","tabButton","tabActive","deactivateTabButtons","initializePaymentFrequencyToggle","toggleCallbackOnPricingTableWithWizard","_visibleTable","_visibleTable2","visibleTable","paymentFrequency","t","monthly","annually","buildMobileSwipers","table","checkForPaymentsLexicValues","selectedLocationData","paymentsSpecs","without","PaymentsEnums","with","isLexicFilledOut","paymentsSpec","Object","values","plan","error","error_detail","lexic_data","switchPaymentsSpecs","isBothFilledOut","PaymentsOptionsStateEnum","setCellState","rowEl","cellElementOrCollection","cellValue","arguments","isHidden","className","apply","isEnabled","NodeList","toggle","HTMLElement","cellStateSwitch","paymentsToggleState","cellState","payments_option","lexicData","desktopTable","_getLocationSelector","getLocationSelector","locationSelector","populateLocationSelectorWithOptionsFromLexic","getLocationSelectorLocationData","_pricingPaymentsToggl","isToggleSwitchedOn","paymentsToggleSection","toggleContainerElement","toggleButton","toggleInput","getPaymentsToggleState","default","isVisible","paymentsStatusValue","optional","not_available","not_set","togglePaymentsToggleDisplay","displayStatus","controlPaymentsToggleDisplayAndState","paymentsOptionState","_getPaymentsToggleSta","_getPaymentsToggleSta2","updateToggleUIStateOnToggle","toggleCSSLogic","pricingPaymentsToggle","_pricingTableTabs","pricingTableTabs","tabs","getActiveTab","updateActiveTab","numberInputs","updateTable","triggeredBy","event","dropdownSelectedOption","tabSelectedPeriod","tableHeaders","currency","payment_frequency","tableHeader","headerName","pricingPlanSlug","headerPriceHTMLElement","headerCurrencyAndFrequencyHTMLElement","basePriceEl","locationPriceEl","registerPriceEl","priceBreakdownEls","_document$querySelect","_document$querySelect2","numberOfLocations","locationsPrice","numberOfRegisters","registersPrice","basePrice","trim","totalRegisterPrice","totalLocationPrice","headerPrice","priceBreakdownEl","hidden","currencyAndFrequency","updatePrices","integratedPaymentsRow","integratedPaymentCheckmarks","integratedPaymentsRows","row","integratedPaymentCell","innerText","updateIntegratedPaymentsCheckmarks","lightspeed_payments_card_rate","rate","lightspeedPaymentsCardRateRow","lightspeedPaymentsCardRateCells","lightspeedPaymentsCardRateRows","lightspeedPaymentsCardRateCell","parentheticalTextElement","updatePaymentsCardRateRow","onboardingRow","onboardingCells","packages","cell","_i","_Object$entries","_Object$entries$_i","planName","label","services","onboarding","updateOnboardingCheckmarks","_geoMonster$getField","GeoMonster","getField","input","max","min","registersInput","toggleLocationSelectorDisplay","filterContainerElement","showFilter","data","locationSelectorValue","filtering","filters","find","item","cookieValue","_filters$find$country","_filters$find","selectedOption","element","option","createElement","text","country_name","_activeBillingPeriodT","activeBillingPeriodTab","replace","eventTarget","isEventTargetCurrentlyActive","activeTab","fieldChoicesKeys","_wizardPricingContainer","WeakMap","_fieldButtonsToStore","_nextButtons","_fieldChoices","_lexicData","_locationSelector","_getLocationSelectorLocationData","_Index_brand","WeakSet","_wizardObserver","Index","_classPrivateFieldInitSpec","observer","wizardImages","image","_classPrivateFieldSet","_classPrivateFieldGet","annual_gtv","sales_channels","analytics_needs","_toSetter","_","_classPrivateFieldGet2","planPanels","wizardPricingPlan","currencyAndFrequencyEl","frequency","getLocalizedAnnualPrice","localizedAnnualPrice","formStage","fieldNameAndValue","wizardPricingStoreField","split","_assertClassBrand","_saveSelectionInVar","_resolveResultPanelContent","nextButton","wizardPricing","_classPrivateFieldGet3","updatePricesBasedOnLocationSelection","fieldName","_getPlanNameBasedOnSelection","selectedOptions","content","combinations","_hideAllPlans","planEl","_showPlanBasedOnName","_setPricingPlanCookie","callback","category","isCallOptanonWrapper","resultPanel","wizardParent","stepToShow","wizardPanelType","height","offsetHeight","wizardP","addButtonListeners","animateImages","updatePricesBasedOnLocationSelectorChange","targetParamKey","paramsString","search","substring","paramsArray","paramResults","val","paramsToObject","jsonObject","decodeURIComponent","createParams","source","constructor","isArray","array","push","encodeURIComponent","join","days","expires","date","Date","setTime","getTime","toUTCString","cookie","getRawCookie","nameEQ","ca","i","c","charAt","rc","isJson","unsetCookie","_CookieMonster","geoFields","country","city","state","continent","longitude","latitude","includedFields","leadformPrefix","isIncludedField","elName","isFormExcludedFromLocalStorage","isADPBusinessType","HTMLSelectElement","options","selectedIndex","hasAttribute","isValidFormEl","storeEncodedFormFieldValue","prefix","localStorage","setItem","encodeString","isEnabledFormAutofill","formAutofill","removeKeyFromLocalStorage","removeItem","clearLocalStorageBasedOnBodyAttr","includedField","removeFormFieldValue","navigator","cookieEnabled","getDecodedFormFieldValue","localStorageValue","getItem","decodeString","getAnonymizedFieldValue","fieldValue","formIsWizard","trackingValue","_element$options$elem","_element$dataset$wiza","tracking","wizardTracking","getTrackingValue","_element$dataset$wiza2","_element$dataset$wiza3","wizardFormStoreField","getFieldName","_field$dataset$formFi","_newField$name","formFieldDataAttribute","formFieldName","_objectSpread","property","documentElement","getPropertyValue","check","str","domain","string","btoa","encodedString","atob","checkAndPushToArray","arr","_toArray","getFormattedTrackingString","clickedLink","_parent$child$grandCh","parent","child","grandChild","stringsArray","clickedLinkParentEl","isParent","isChild","isGrandChild","breadcrumbParent","previousElementSibling","navigationLevel","isParentBreadCrumb","_form","_incompleteFormGTMObject","_isGolfProduct","_FormGTMObjectConstructor_brand","_assertClassBrand$cal","elements","_getFieldValue","eventAction","completedFieldValue","_trackingKeys","trackingKey","_getTrackingValue","assign","event_action","_assertClassBrand$cal7","_assertClassBrand$cal8","_classPrivateFieldGet4","formTrackingName","_assertClassBrand$cal2","_assertClassBrand$cal3","_assertClassBrand$cal4","_assertClassBrand$cal5","_assertClassBrand$cal6","_productValue","_mappingObject$produc","productValueFromSelectField","productValueFromHiddenInputField","productFieldValue","productTrackingMapping","blogProductFieldValue","word","toUpperCase","_assertClassBrand$cal9","_emailValue$split$","emailValue","match","getFormPlacementFromDataAttribute","getPlacement","PlacementEnums","_form$dataset$formPla","formPlacement","_eventObject","_sendToDataLayer","dataLayer","channelsCallbackGroup","formCallback","eventCategory","configLabelArray","callableFunctionTemplate","concatFormLabel","fieldCallback","buttonCallback","concatButtonLabel","menuCallback","getMainBTFNavEventLabelText","footerCallback","getFooterNavEventLabelText","secondaryMenuCallback","getSecondaryBTFNavEventLabelText","regionAlertCallback","labelEl","businessTypeCookieSetCallback","getFormattedBusinessTypeLabel","cookieNotificationCallback","expertsCallback","alertBannerCallback","truncateAlertBannerTitle","sliderCallback","_ref4","btSelectionModuleCallback","_ref9","pricingPaymentsToggleCallback","_ref5","wizardFormElementCallback","_ref6","wizardFormFieldCallback","_ref7","dynamicLandingPagesCallback","_ref10","wizardPricingCallback","_ref8","tabClickForPanelChangeCallback","_ref11","logErrorDetailsObj","_ref13","modifierFunction","_ref13$configLabelArr","eventLabel","_ref12","_ref12$eventValue","eventValue","nonInteraction","eventSendingObject","_ref14","labelName","formEl","getFormTrackingName","verifyFormField","_ref15","a","_ref16","getClickedElAncestorsText","_ref17","_ref18","navLevel","getAttribute","formattedChildText","columnGroupEl","parentEl","formattedParentText","readableLabel","_ref19","_ref20","GoogleTagManagerDeprecated","eventName","channelsCallbackGroupFunction","reconstructedObject","trackingChannelsConfig","_typeof","callbackName","channelsObjectConstructor"],"sourceRoot":""}